Indent correctly IPv6 code.
--- a/examples/ipv6/fragmentation-ipv6.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/examples/ipv6/fragmentation-ipv6.cc Wed Dec 30 14:22:25 2009 +0100
@@ -54,9 +54,9 @@
*/
inline void AddAddress (Ptr<Node>& n, uint32_t interface, Ipv6Address address)
{
- Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
- ipv6->AddAddress (interface, address);
- }
+ Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
+ ipv6->AddAddress (interface, address);
+ }
/**
* \brief Print the routing table.
@@ -64,27 +64,27 @@
*/
inline void PrintRoutingTable (Ptr<Node>& n)
{
- Ptr<Ipv6StaticRouting> routing = 0;
- Ipv6StaticRoutingHelper routingHelper;
- Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
- uint32_t nbRoutes = 0;
- Ipv6RoutingTableEntry route;
+ Ptr<Ipv6StaticRouting> routing = 0;
+ Ipv6StaticRoutingHelper routingHelper;
+ Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
+ uint32_t nbRoutes = 0;
+ Ipv6RoutingTableEntry route;
- routing = routingHelper.GetStaticRouting (ipv6);
+ routing = routingHelper.GetStaticRouting (ipv6);
- std::cout << "Routing table of " << n << " : " << std::endl;
- std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
+ std::cout << "Routing table of " << n << " : " << std::endl;
+ std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
- 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;
- }
+ 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;
+ }
}
};
--- a/examples/ipv6/icmpv6-redirect.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/examples/ipv6/icmpv6-redirect.cc Wed Dec 30 14:22:25 2009 +0100
@@ -57,26 +57,26 @@
*/
class StackHelper
{
- public:
- /**
- * \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> ();
- uint32_t nbRoutes = 0;
- Ipv6RoutingTableEntry route;
+public:
+ /**
+ * \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> ();
+ uint32_t nbRoutes = 0;
+ Ipv6RoutingTableEntry route;
- routing = routingHelper.GetStaticRouting (ipv6);
+ routing = routingHelper.GetStaticRouting (ipv6);
- std::cout << "Routing table of " << n << " : " << std::endl;
- std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
+ std::cout << "Routing table of " << n << " : " << std::endl;
+ std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
- nbRoutes = routing->GetNRoutes ();
- for(uint32_t i = 0 ; i < nbRoutes ; i++)
+ nbRoutes = routing->GetNRoutes ();
+ for(uint32_t i = 0 ; i < nbRoutes ; i++)
{
route = routing->GetRoute (i);
std::cout << route.GetDest () << "\t"
@@ -85,27 +85,26 @@
<< route.GetPrefixToUse () << "\t"
<< std::endl;
}
- }
+ }
- /**
- * \brief Add an host route.
- * \param n node
- * \param dst destination address
- * \param nextHop next hop for destination
- * \param interface output interface
- */
- inline void AddHostRouteTo (Ptr<Node>& n, Ipv6Address dst, Ipv6Address nextHop, uint32_t interface)
- {
- Ptr<Ipv6StaticRouting> routing = 0;
- Ipv6StaticRoutingHelper routingHelper;
- Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
+ /**
+ * \brief Add an host route.
+ * \param n node
+ * \param dst destination address
+ * \param nextHop next hop for destination
+ * \param interface output interface
+ */
+ inline void AddHostRouteTo (Ptr<Node>& n, Ipv6Address dst, Ipv6Address nextHop, uint32_t interface)
+ {
+ Ptr<Ipv6StaticRouting> routing = 0;
+ Ipv6StaticRoutingHelper routingHelper;
+ Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
- routing = routingHelper.GetStaticRouting (ipv6);
- routing->AddHostRouteTo (dst, nextHop, interface);
- }
+ routing = routingHelper.GetStaticRouting (ipv6);
+ routing->AddHostRouteTo (dst, nextHop, interface);
+ }
};
-
int main (int argc, char **argv)
{
#if 0
@@ -131,7 +130,7 @@
NodeContainer all(sta1, r1, r2, sta2);
StackHelper stackHelper;
-
+
InternetStackHelper internetv6;
internetv6.Install (all);
@@ -155,7 +154,7 @@
iic2.SetRouter (0, true);
stackHelper.AddHostRouteTo (r1, iic2.GetAddress (1, 1), iic1.GetAddress (2, 1), iic1.GetInterfaceIndex (1));
-
+
Simulator::Schedule(Seconds(0.0), &StackHelper::PrintRoutingTable, &stackHelper, r1);
Simulator::Schedule(Seconds(3.0), &StackHelper::PrintRoutingTable, &stackHelper, sta1);
--- a/examples/ipv6/ping6.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/examples/ipv6/ping6.cc Wed Dec 30 14:22:25 2009 +0100
@@ -54,7 +54,7 @@
CommandLine cmd;
cmd.Parse (argc, argv);
-
+
NS_LOG_INFO ("Create nodes.");
NodeContainer n;
n.Create (4);
@@ -84,10 +84,10 @@
Time interPacketInterval = Seconds (1.);
Ping6Helper ping6;
-/*
- ping6.SetLocal (i.GetAddress (0, 1));
- ping6.SetRemote (i.GetAddress (1, 1));
-*/
+ /*
+ ping6.SetLocal (i.GetAddress (0, 1));
+ ping6.SetRemote (i.GetAddress (1, 1));
+ */
ping6.SetIfIndex (i.GetInterfaceIndex (0));
ping6.SetRemote (Ipv6Address::GetAllNodesMulticast ());
--- a/examples/ipv6/radvd-two-prefix.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/examples/ipv6/radvd-two-prefix.cc Wed Dec 30 14:22:25 2009 +0100
@@ -52,38 +52,38 @@
*/
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)
- {
- Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
- ipv6->AddAddress (interface, 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)
- {
- Ptr<Ipv6StaticRouting> routing = 0;
- Ipv6StaticRoutingHelper routingHelper;
- Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
- uint32_t nbRoutes = 0;
- Ipv6RoutingTableEntry route;
+ /**
+ * \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> ();
+ uint32_t nbRoutes = 0;
+ Ipv6RoutingTableEntry route;
- routing = routingHelper.GetStaticRouting (ipv6);
+ routing = routingHelper.GetStaticRouting (ipv6);
- std::cout << "Routing table of " << n << " : " << std::endl;
- std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
+ std::cout << "Routing table of " << n << " : " << std::endl;
+ std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
- nbRoutes = routing->GetNRoutes ();
- for (uint32_t i = 0 ; i < nbRoutes ; i++)
+ nbRoutes = routing->GetNRoutes ();
+ for (uint32_t i = 0 ; i < nbRoutes ; i++)
{
route = routing->GetRoute (i);
std::cout << route.GetDest () << "\t"
@@ -92,7 +92,7 @@
<< route.GetPrefixToUse () << "\t"
<< std::endl;
}
- }
+ }
};
int main (int argc, char** argv)
@@ -107,32 +107,32 @@
LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
#endif
- CommandLine cmd;
+ CommandLine cmd;
cmd.Parse (argc, argv);
-
- NS_LOG_INFO ("Create nodes.");
- Ptr<Node> n0 = CreateObject<Node> ();
- Ptr<Node> r = CreateObject<Node> ();
- Ptr<Node> n1 = CreateObject<Node> ();
- NodeContainer net1 (n0, r);
- NodeContainer net2 (r, n1);
- NodeContainer all (n0, r, n1);
+ NS_LOG_INFO ("Create nodes.");
+ Ptr<Node> n0 = CreateObject<Node> ();
+ Ptr<Node> r = CreateObject<Node> ();
+ Ptr<Node> n1 = CreateObject<Node> ();
+
+ NodeContainer net1 (n0, r);
+ NodeContainer net2 (r, n1);
+ NodeContainer all (n0, r, n1);
StackHelper stackHelper;
- NS_LOG_INFO ("Create IPv6 Internet Stack");
+ NS_LOG_INFO ("Create IPv6 Internet Stack");
InternetStackHelper internetv6;
internetv6.Install (all);
NS_LOG_INFO ("Create channels.");
- CsmaHelper csma;
+ CsmaHelper csma;
csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
- NetDeviceContainer d1 = csma.Install (net1); /* n0 - R */
- NetDeviceContainer d2 = csma.Install (net2); /* R - n1 */
+ NetDeviceContainer d1 = csma.Install (net1); /* n0 - R */
+ NetDeviceContainer d2 = csma.Install (net2); /* R - n1 */
- NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
- Ipv6AddressHelper ipv6;
+ NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
+ Ipv6AddressHelper ipv6;
/* first subnet */
ipv6.NewNetwork (Ipv6Address ("2001:1::"), 64);
@@ -208,7 +208,7 @@
/* at the end, RA addresses and routes should be cleared */
Simulator::Schedule (Seconds (10.0), &StackHelper::PrintRoutingTable, &stackHelper, n0);
- std::ofstream ascii;
+ std::ofstream ascii;
ascii.open ("radvd-two-prefix.tr");
CsmaHelper::EnablePcapAll (std::string ("radvd-two-prefix"), true);
CsmaHelper::EnableAsciiAll (ascii);
--- a/examples/ipv6/radvd.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/examples/ipv6/radvd.cc Wed Dec 30 14:22:25 2009 +0100
@@ -56,31 +56,31 @@
LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
#endif
- CommandLine cmd;
+ CommandLine cmd;
cmd.Parse (argc, argv);
-
- NS_LOG_INFO ("Create nodes.");
- Ptr<Node> n0 = CreateObject<Node> ();
- Ptr<Node> r = CreateObject<Node> ();
- Ptr<Node> n1 = CreateObject<Node> ();
+
+ NS_LOG_INFO ("Create nodes.");
+ Ptr<Node> n0 = CreateObject<Node> ();
+ Ptr<Node> r = CreateObject<Node> ();
+ Ptr<Node> n1 = CreateObject<Node> ();
- NodeContainer net1 (n0, r);
- NodeContainer net2 (r, n1);
- NodeContainer all (n0, r, n1);
+ NodeContainer net1 (n0, r);
+ NodeContainer net2 (r, n1);
+ NodeContainer all (n0, r, n1);
- NS_LOG_INFO ("Create IPv6 Internet Stack");
+ NS_LOG_INFO ("Create IPv6 Internet Stack");
InternetStackHelper internetv6;
internetv6.Install (all);
NS_LOG_INFO ("Create channels.");
- CsmaHelper csma;
+ CsmaHelper csma;
csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
- NetDeviceContainer d1 = csma.Install (net1); /* n0 - R */
- NetDeviceContainer d2 = csma.Install (net2); /* R - n1 */
+ NetDeviceContainer d1 = csma.Install (net1); /* n0 - R */
+ NetDeviceContainer d2 = csma.Install (net2); /* R - n1 */
- NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
- Ipv6AddressHelper ipv6;
+ NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
+ Ipv6AddressHelper ipv6;
/* first subnet */
ipv6.NewNetwork (Ipv6Address ("2001:1::"), 64);
@@ -143,7 +143,7 @@
apps.Start (Seconds (2.0));
apps.Stop (Seconds (7.0));
- std::ofstream ascii;
+ std::ofstream ascii;
ascii.open ("radvd.tr");
CsmaHelper::EnablePcapAll (std::string ("radvd"), true);
CsmaHelper::EnableAsciiAll (ascii);
--- a/examples/routing/simple-routing-ping6.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/examples/routing/simple-routing-ping6.cc Wed Dec 30 14:22:25 2009 +0100
@@ -45,39 +45,39 @@
*/
class StackHelper
{
- public:
+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 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)
- {
- Ptr<Ipv6StaticRouting> routing = 0;
- Ipv6StaticRoutingHelper routingHelper;
- Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
- uint32_t nbRoutes = 0;
- Ipv6RoutingTableEntry route;
+ /**
+ * \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> ();
+ uint32_t nbRoutes = 0;
+ Ipv6RoutingTableEntry route;
- routing = routingHelper.GetStaticRouting (ipv6);
+ routing = routingHelper.GetStaticRouting (ipv6);
- std::cout << "Routing table of " << n << " : " << std::endl;
- std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
+ std::cout << "Routing table of " << n << " : " << std::endl;
+ std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
- nbRoutes = routing->GetNRoutes ();
- for (uint32_t i = 0 ; i < nbRoutes ; i++)
+ nbRoutes = routing->GetNRoutes ();
+ for (uint32_t i = 0 ; i < nbRoutes ; i++)
{
route = routing->GetRoute (i);
std::cout << route.GetDest () << "\t"
@@ -86,7 +86,7 @@
<< route.GetPrefixToUse () << "\t"
<< std::endl;
}
- }
+ }
};
int main (int argc, char** argv)
@@ -99,38 +99,38 @@
LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
#endif
- CommandLine cmd;
+ CommandLine cmd;
cmd.Parse (argc, argv);
StackHelper stackHelper;
-
- NS_LOG_INFO ("Create nodes.");
- Ptr<Node> n0 = CreateObject<Node> ();
- Ptr<Node> r = CreateObject<Node> ();
- Ptr<Node> n1 = CreateObject<Node> ();
+
+ NS_LOG_INFO ("Create nodes.");
+ Ptr<Node> n0 = CreateObject<Node> ();
+ Ptr<Node> r = CreateObject<Node> ();
+ Ptr<Node> n1 = CreateObject<Node> ();
- NodeContainer net1 (n0, r);
- NodeContainer net2 (r, n1);
- NodeContainer all (n0, r, n1);
+ NodeContainer net1 (n0, r);
+ NodeContainer net2 (r, n1);
+ NodeContainer all (n0, r, n1);
- NS_LOG_INFO ("Create IPv6 Internet Stack");
+ NS_LOG_INFO ("Create IPv6 Internet Stack");
InternetStackHelper internetv6;
internetv6.Install (all);
NS_LOG_INFO ("Create channels.");
- CsmaHelper csma;
+ CsmaHelper csma;
csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
- NetDeviceContainer d1 = csma.Install (net1);
- NetDeviceContainer d2 = csma.Install (net2);
+ NetDeviceContainer d1 = csma.Install (net1);
+ NetDeviceContainer d2 = csma.Install (net2);
- NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
- Ipv6AddressHelper ipv6;
- ipv6.NewNetwork (Ipv6Address ("2001:1::"), 64);
- Ipv6InterfaceContainer i1 = ipv6.Assign (d1);
+ NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
+ Ipv6AddressHelper ipv6;
+ ipv6.NewNetwork (Ipv6Address ("2001:1::"), 64);
+ Ipv6InterfaceContainer i1 = ipv6.Assign (d1);
i1.SetRouter (1, true);
- ipv6.NewNetwork (Ipv6Address ("2001:2::"), 64);
- Ipv6InterfaceContainer i2 = ipv6.Assign (d2);
+ ipv6.NewNetwork (Ipv6Address ("2001:2::"), 64);
+ Ipv6InterfaceContainer i2 = ipv6.Assign (d2);
i2.SetRouter (0, true);
stackHelper.PrintRoutingTable(n0);
@@ -151,7 +151,7 @@
apps.Start (Seconds (2.0));
apps.Stop (Seconds (20.0));
- std::ofstream ascii;
+ std::ofstream ascii;
ascii.open ("simple-routing-ping6.tr");
CsmaHelper::EnablePcapAll (std::string ("simple-routing-ping6"), true);
CsmaHelper::EnableAsciiAll (ascii);
--- a/src/applications/ping6/ping6.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/applications/ping6/ping6.cc Wed Dec 30 14:22:25 2009 +0100
@@ -48,30 +48,30 @@
.SetParent<Application>()
.AddConstructor<Ping6>()
.AddAttribute ("MaxPackets",
- "The maximum number of packets the application will send",
- UintegerValue (100),
- MakeUintegerAccessor (&Ping6::m_count),
- MakeUintegerChecker<uint32_t>())
+ "The maximum number of packets the application will send",
+ UintegerValue (100),
+ MakeUintegerAccessor (&Ping6::m_count),
+ MakeUintegerChecker<uint32_t>())
.AddAttribute ("Interval",
- "The time to wait between packets",
- TimeValue (Seconds (1.0)),
- MakeTimeAccessor (&Ping6::m_interval),
- MakeTimeChecker ())
+ "The time to wait between packets",
+ TimeValue (Seconds (1.0)),
+ MakeTimeAccessor (&Ping6::m_interval),
+ MakeTimeChecker ())
.AddAttribute ("RemoteIpv6",
- "The Ipv6Address of the outbound packets",
- Ipv6AddressValue (),
- MakeIpv6AddressAccessor (&Ping6::m_peerAddress),
- MakeIpv6AddressChecker ())
+ "The Ipv6Address of the outbound packets",
+ Ipv6AddressValue (),
+ MakeIpv6AddressAccessor (&Ping6::m_peerAddress),
+ MakeIpv6AddressChecker ())
.AddAttribute ("LocalIpv6",
- "Local Ipv6Address of the sender",
- Ipv6AddressValue (),
- MakeIpv6AddressAccessor (&Ping6::m_localAddress),
- MakeIpv6AddressChecker ())
+ "Local Ipv6Address of the sender",
+ Ipv6AddressValue (),
+ MakeIpv6AddressAccessor (&Ping6::m_localAddress),
+ MakeIpv6AddressChecker ())
.AddAttribute ("PacketSize",
- "Size of packets generated",
- UintegerValue (100),
- MakeUintegerAccessor (&Ping6::m_size),
- MakeUintegerChecker<uint32_t>())
+ "Size of packets generated",
+ UintegerValue (100),
+ MakeUintegerAccessor (&Ping6::m_size),
+ MakeUintegerChecker<uint32_t>())
;
return tid;
}
@@ -102,17 +102,17 @@
NS_LOG_FUNCTION_NOARGS ();
if (!m_socket)
- {
- TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
- m_socket = Socket::CreateSocket (GetNode (), tid);
+ {
+ TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
+ m_socket = Socket::CreateSocket (GetNode (), tid);
- NS_ASSERT (m_socket);
+ NS_ASSERT (m_socket);
- m_socket->Bind (Inet6SocketAddress (m_localAddress, 0));
- m_socket->Connect (Inet6SocketAddress (m_peerAddress, 0));
- m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
- m_socket->SetRecvCallback (MakeCallback (&Ping6::HandleRead, this));
- }
+ m_socket->Bind (Inet6SocketAddress (m_localAddress, 0));
+ m_socket->Connect (Inet6SocketAddress (m_peerAddress, 0));
+ m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
+ m_socket->SetRecvCallback (MakeCallback (&Ping6::HandleRead, this));
+ }
ScheduleTransmit (Seconds (0.));
}
@@ -134,9 +134,9 @@
NS_LOG_FUNCTION_NOARGS ();
if (m_socket)
- {
- m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> >());
- }
+ {
+ m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> >());
+ }
Simulator::Cancel (m_sendEvent);
}
@@ -167,16 +167,16 @@
Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
if (m_ifIndex > 0)
- {
- /* hack to have ifIndex in Ipv6RawSocketImpl
- * maybe add a SetIfIndex in Ipv6RawSocketImpl directly
- */
- src = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, 0).GetAddress ();
- }
+ {
+ /* hack to have ifIndex in Ipv6RawSocketImpl
+ * maybe add a SetIfIndex in Ipv6RawSocketImpl directly
+ */
+ src = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, 0).GetAddress ();
+ }
else
- {
- src = m_localAddress;
- }
+ {
+ src = m_localAddress;
+ }
NS_ASSERT_MSG (m_size >= 4, "ICMPv6 echo request payload size must be >= 4");
data[0] = 0xDE;
@@ -191,7 +191,7 @@
req.SetId (0xBEEF);
req.SetSeq (m_seq);
m_seq++;
-
+
/* we do not calculate pseudo header checksum here, because we are not sure about
* source IPv6 address. Checksum is calculated in Ipv6RawSocketImpl.
*/
@@ -201,16 +201,16 @@
/* use Loose Routing (routing type 0) */
if (m_routers.size ())
- {
- 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);
- p->AddHeader (routingHeader);
- m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_EXT_ROUTING));
- }
+ {
+ 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);
+ p->AddHeader (routingHeader);
+ m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_EXT_ROUTING));
+ }
m_socket->Send (p, 0);
++m_sent;
@@ -218,9 +218,9 @@
NS_LOG_INFO ("Sent " << p->GetSize () << " bytes to " << m_peerAddress);
if (m_sent < m_count)
- {
- ScheduleTransmit (m_interval);
- }
+ {
+ ScheduleTransmit (m_interval);
+ }
}
void Ping6::HandleRead (Ptr<Socket> socket)
@@ -230,28 +230,28 @@
Ptr<Packet> packet=0;
Address from;
while (packet = socket->RecvFrom (from))
- {
- if (Inet6SocketAddress::IsMatchingType (from))
{
- Ipv6Header hdr;
- Icmpv6Echo reply (0);
- Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
+ if (Inet6SocketAddress::IsMatchingType (from))
+ {
+ Ipv6Header hdr;
+ Icmpv6Echo reply (0);
+ Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
- packet->RemoveHeader (hdr);
+ packet->RemoveHeader (hdr);
- switch (*packet->PeekData ())
- {
- case Icmpv6Header::ICMPV6_ECHO_REPLY:
- packet->RemoveHeader (reply);
+ switch (*packet->PeekData ())
+ {
+ case Icmpv6Header::ICMPV6_ECHO_REPLY:
+ packet->RemoveHeader (reply);
- NS_LOG_INFO ("Received Echo Reply size = " << std::dec << packet->GetSize () << " bytes from " << address.GetIpv6 () << " id = " << (uint16_t)reply.GetId () << " seq = " << (uint16_t)reply.GetSeq ());
- break;
- default:
- /* other type, discard */
- break;
- }
+ NS_LOG_INFO ("Received Echo Reply size = " << std::dec << packet->GetSize () << " bytes from " << address.GetIpv6 () << " id = " << (uint16_t)reply.GetId () << " seq = " << (uint16_t)reply.GetSeq ());
+ break;
+ default:
+ /* other type, discard */
+ break;
+ }
+ }
}
- }
}
} /* namespace ns3 */
--- a/src/applications/ping6/ping6.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/applications/ping6/ping6.h Wed Dec 30 14:22:25 2009 +0100
@@ -44,142 +44,142 @@
*/
class Ping6 : public Application
{
- public:
- /**
- * \brief Get the type ID.
- * \return type ID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type ID.
+ * \return type ID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Constructor.
- */
- Ping6 ();
+ /**
+ * \brief Constructor.
+ */
+ Ping6 ();
- /**
- * \brief Destructor.
- */
- virtual ~Ping6 ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ping6 ();
- /**
- * \brief Set the local address.
- * \param ipv6 the local IPv6 address
- */
- void SetLocal (Ipv6Address ipv6);
+ /**
+ * \brief Set the local address.
+ * \param ipv6 the local IPv6 address
+ */
+ void SetLocal (Ipv6Address ipv6);
- /**
- * \brief Set the remote peer.
- * \param ipv6 IPv6 address of the peer
- */
- void SetRemote (Ipv6Address ipv6);
+ /**
+ * \brief Set the remote peer.
+ * \param ipv6 IPv6 address of the peer
+ */
+ void SetRemote (Ipv6Address ipv6);
- /**
- * \brief Set the out interface index.
- * This is to send to link-local (unicast or multicast) address
- * when a node has multiple interfaces.
- * \param ifIndex interface index
- */
- void SetIfIndex (uint32_t ifIndex);
+ /**
+ * \brief Set the out interface index.
+ * This is to send to link-local (unicast or multicast) address
+ * when a node has multiple interfaces.
+ * \param ifIndex interface index
+ */
+ void SetIfIndex (uint32_t ifIndex);
- /**
- * \brief Set routers for routing type 0 (loose routing).
- * \param routers routers addresses
- */
- void SetRouters(std::vector<Ipv6Address> routers);
+ /**
+ * \brief Set routers for routing type 0 (loose routing).
+ * \param routers routers addresses
+ */
+ void SetRouters(std::vector<Ipv6Address> routers);
- protected:
- /**
- * \brief Dispose this object;
- */
- virtual void DoDispose ();
+protected:
+ /**
+ * \brief Dispose this object;
+ */
+ virtual void DoDispose ();
- private:
- /**
- * \brief Start the application.
- */
- virtual void StartApplication ();
+private:
+ /**
+ * \brief Start the application.
+ */
+ virtual void StartApplication ();
- /**
- * \brief Stop the application.
- */
- virtual void StopApplication ();
+ /**
+ * \brief Stop the application.
+ */
+ virtual void StopApplication ();
- /**
- * \brief Schedule sending a packet.
- * \param dt interval between packet
- */
- void ScheduleTransmit (Time dt);
+ /**
+ * \brief Schedule sending a packet.
+ * \param dt interval between packet
+ */
+ void ScheduleTransmit (Time dt);
- /**
- * \brief Send a packet.
- */
- void Send ();
+ /**
+ * \brief Send a packet.
+ */
+ void Send ();
- /**
- * \brief Receive method.
- * \param socket socket that receive a packet
- */
- void HandleRead (Ptr<Socket> socket);
+ /**
+ * \brief Receive method.
+ * \param socket socket that receive a packet
+ */
+ void HandleRead (Ptr<Socket> socket);
- /**
- * \brief Peer IPv6 address.
- */
- Ipv6Address m_address;
+ /**
+ * \brief Peer IPv6 address.
+ */
+ Ipv6Address m_address;
- /**
- * \brief Number of "Echo request" packets that will be sent.
- */
- uint32_t m_count;
+ /**
+ * \brief Number of "Echo request" packets that will be sent.
+ */
+ uint32_t m_count;
- /**
- * \brief Number of packets sent.
- */
- uint32_t m_sent;
+ /**
+ * \brief Number of packets sent.
+ */
+ uint32_t m_sent;
- /**
- * \brief Size of the packet.
- */
- uint32_t m_size;
+ /**
+ * \brief Size of the packet.
+ */
+ uint32_t m_size;
- /**
- * \brief Intervall between packets sent.
- */
- Time m_interval;
+ /**
+ * \brief Intervall between packets sent.
+ */
+ Time m_interval;
- /**
- * \brief Local address.
- */
- Ipv6Address m_localAddress;
+ /**
+ * \brief Local address.
+ */
+ Ipv6Address m_localAddress;
- /**
- * \brief Peer address.
- */
- Ipv6Address m_peerAddress;
+ /**
+ * \brief Peer address.
+ */
+ Ipv6Address m_peerAddress;
- /**
- * \brief Local socket.
- */
- Ptr<Socket> m_socket;
+ /**
+ * \brief Local socket.
+ */
+ Ptr<Socket> m_socket;
- /**
- * \brief Sequence number.
- */
- uint16_t m_seq;
+ /**
+ * \brief Sequence number.
+ */
+ uint16_t m_seq;
- /**
- * \brief Event ID.
- */
- EventId m_sendEvent;
+ /**
+ * \brief Event ID.
+ */
+ EventId m_sendEvent;
- /**
- * \brief Out interface (i.e. for link-local communication).
- */
- uint32_t m_ifIndex;
+ /**
+ * \brief Out interface (i.e. for link-local communication).
+ */
+ uint32_t m_ifIndex;
- /**
- * \brief Routers addresses for routing type 0.
- */
- std::vector<Ipv6Address> m_routers;
+ /**
+ * \brief Routers addresses for routing type 0.
+ */
+ std::vector<Ipv6Address> m_routers;
};
} /* namespace ns3 */
--- a/src/applications/radvd/radvd-interface.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/applications/radvd/radvd-interface.h Wed Dec 30 14:22:25 2009 +0100
@@ -35,384 +35,384 @@
*/
class RadvdInterface : public SimpleRefCount<RadvdInterface>
{
- public:
- /**
- * \brief Constructor.
- * \param interface interface index
- */
- RadvdInterface (uint32_t interface);
+public:
+ /**
+ * \brief Constructor.
+ * \param interface interface index
+ */
+ RadvdInterface (uint32_t interface);
- /**
- * \brief Constructor.
- * \param interface interface index
- * \param maxRtrAdvInterval maximum RA interval (ms)
- * \param minRtrAdvInterval minimum RA interval (ms)
- */
- RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval);
+ /**
+ * \brief Constructor.
+ * \param interface interface index
+ * \param maxRtrAdvInterval maximum RA interval (ms)
+ * \param minRtrAdvInterval minimum RA interval (ms)
+ */
+ RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval);
+
+ /**
+ * \brief Destructor.
+ */
+ ~RadvdInterface ();
- /**
- * \brief Destructor.
- */
- ~RadvdInterface ();
+ /**
+ * \brief Get interface index for this configuration.
+ * \return interface index
+ */
+ uint32_t GetInterface () const;
+
+ /**
+ * \brief Get list of prefixes advertised for this interface.
+ * \return list of IPv6 prefixes
+ */
+ std::list <Ptr<RadvdPrefix> > GetPrefixes () const;
- /**
- * \brief Get interface index for this configuration.
- * \return interface index
- */
- uint32_t GetInterface () const;
+ /**
+ * \brief Add a prefix to advertise on interface.
+ * \param routerPrefix prefix to advertise
+ */
+ void AddPrefix (Ptr<RadvdPrefix> routerPrefix);
- /**
- * \brief Get list of prefixes advertised for this interface.
- * \return list of IPv6 prefixes
- */
- std::list <Ptr<RadvdPrefix> > GetPrefixes () const;
+ /**
+ * \brief Is send advert enabled (periodic RA and reply to RS) ?
+ * \return send advert flag
+ */
+ bool IsSendAdvert () const;
- /**
- * \brief Add a prefix to advertise on interface.
- * \param routerPrefix prefix to advertise
- */
- void AddPrefix (Ptr<RadvdPrefix> routerPrefix);
-
- /**
- * \brief Is send advert enabled (periodic RA and reply to RS) ?
- * \return send advert flag
- */
- bool IsSendAdvert () const;
-
- /**
- * \brief Set send advert flag.
- * \param sendAdvert value
- */
- void SetSendAdvert (bool sendAdvert);
+ /**
+ * \brief Set send advert flag.
+ * \param sendAdvert value
+ */
+ void SetSendAdvert (bool sendAdvert);
+
+ /**
+ * \brief Get maximum RA interval.
+ * \return RA interval (ms)
+ */
+ uint32_t GetMaxRtrAdvInterval () const;
- /**
- * \brief Get maximum RA interval.
- * \return RA interval (ms)
- */
- uint32_t GetMaxRtrAdvInterval () const;
+ /**
+ * \brief Get maximum RA interval.
+ * \param maxRtrAdvInterval RA interval (ms)
+ */
+ void SetMaxRtrAdvInterval (uint32_t maxRtrAdvInterval);
+
+ /**
+ * \brief Get minimum RA interval
+ * \return RA interval (ms)
+ */
+ uint32_t GetMinRtrAdvInterval () const;
- /**
- * \brief Get maximum RA interval.
- * \param maxRtrAdvInterval RA interval (ms)
- */
- void SetMaxRtrAdvInterval (uint32_t maxRtrAdvInterval);
+ /**
+ * \brief Get minimum RA interval
+ * \param minRtrAdvInterval RA interval (ms).
+ */
+ void SetMinRtrAdvInterval (uint32_t minRtrAdvInterval);
+
+ /**
+ * \brief Get minimum delay between RAs.
+ * \return minimum delay (ms)
+ */
+ uint32_t GetMinDelayBetweenRAs () const;
- /**
- * \brief Get minimum RA interval
- * \return RA interval (ms)
- */
- uint32_t GetMinRtrAdvInterval () const;
-
- /**
- * \brief Get minimum RA interval
- * \param minRtrAdvInterval RA interval (ms).
- */
- void SetMinRtrAdvInterval (uint32_t minRtrAdvInterval);
+ /**
+ * \brief Set minimum delay between RAs.
+ * \param minDelayBetweenRAs minimum delay (ms)
+ */
+ void SetMinDelayBetweenRAs (uint32_t minDelayBetweenRAs);
- /**
- * \brief Get minimum delay between RAs.
- * \return minimum delay (ms)
- */
- uint32_t GetMinDelayBetweenRAs () const;
-
- /**
- * \brief Set minimum delay between RAs.
- * \param minDelayBetweenRAs minimum delay (ms)
- */
- void SetMinDelayBetweenRAs (uint32_t minDelayBetweenRAs);
+ /**
+ * \brief Is managed flag enabled ?
+ * \return managed flag
+ */
+ bool IsManagedFlag () const;
- /**
- * \brief Is managed flag enabled ?
- * \return managed flag
- */
- bool IsManagedFlag () const;
-
- /**
- * \brief Set managed flag
- * \param managedFlag value
- */
- void SetManagedFlag (bool managedFlag);
+ /**
+ * \brief Set managed flag
+ * \param managedFlag value
+ */
+ void SetManagedFlag (bool managedFlag);
+
+ /**
+ * \brief Is "other config" flag enabled ?
+ * \return other config flag
+ */
+ bool IsOtherConfigFlag () const;
- /**
- * \brief Is "other config" flag enabled ?
- * \return other config flag
- */
- bool IsOtherConfigFlag () const;
-
- /**
- * \brief Set "other config" flag
- * \param otherConfigFlag value
- */
- void SetOtherConfigFlag (bool otherConfigFlag);
+ /**
+ * \brief Set "other config" flag
+ * \param otherConfigFlag value
+ */
+ void SetOtherConfigFlag (bool otherConfigFlag);
+
+ /**
+ * \brief Get link MTU.
+ * \return link MTU
+ */
+ uint32_t GetLinkMtu () const;
- /**
- * \brief Get link MTU.
- * \return link MTU
- */
- uint32_t GetLinkMtu () const;
-
- /**
- * \brief Set link MTU.
- * \param linkMtu link MTU
- */
- void SetLinkMtu (uint32_t linkMtu);
+ /**
+ * \brief Set link MTU.
+ * \param linkMtu link MTU
+ */
+ void SetLinkMtu (uint32_t linkMtu);
+
+ /**
+ * \brief Get reachable time.
+ * \return reachable time
+ */
+ uint32_t GetReachableTime () const;
- /**
- * \brief Get reachable time.
- * \return reachable time
- */
- uint32_t GetReachableTime () const;
-
- /**
- * \brief Set reachable time.
- * \param reachableTime reachable time
- */
- void SetReachableTime (uint32_t reachableTime);
+ /**
+ * \brief Set reachable time.
+ * \param reachableTime reachable time
+ */
+ void SetReachableTime (uint32_t reachableTime);
+
+ /**
+ * \brief Get default lifetime.
+ * \return default lifetime
+ */
+ uint32_t GetDefaultLifeTime () const;
- /**
- * \brief Get default lifetime.
- * \return default lifetime
- */
- uint32_t GetDefaultLifeTime () const;
-
- /**
- * \brief Set default lifetime.
- * \param defaultLifeTime default lifetime
- */
- void SetDefaultLifeTime (uint32_t defaultLifeTime);
+ /**
+ * \brief Set default lifetime.
+ * \param defaultLifeTime default lifetime
+ */
+ void SetDefaultLifeTime (uint32_t defaultLifeTime);
+
+ /**
+ * \brief Get retransmission timer.
+ * \return retransmission timer
+ */
+ uint32_t GetRetransTimer () const;
- /**
- * \brief Get retransmission timer.
- * \return retransmission timer
- */
- uint32_t GetRetransTimer () const;
-
- /**
- * \brief Set retransmission timer.
- * \param retransTimer retransmission timer
- */
- void SetRetransTimer (uint32_t retransTimer);
+ /**
+ * \brief Set retransmission timer.
+ * \param retransTimer retransmission timer
+ */
+ void SetRetransTimer (uint32_t retransTimer);
+
+ /**
+ * \brief Get current hop limit.
+ * \return current hop limit for the link
+ */
+ uint8_t GetCurHopLimit () const;
- /**
- * \brief Get current hop limit.
- * \return current hop limit for the link
- */
- uint8_t GetCurHopLimit () const;
-
- /**
- * \brief Set current hop limit.
- * \param curHopLimit current hop limit for the link
- */
- void SetCurHopLimit (uint8_t curHopLimit);
+ /**
+ * \brief Set current hop limit.
+ * \param curHopLimit current hop limit for the link
+ */
+ void SetCurHopLimit (uint8_t curHopLimit);
+
+ /**
+ * \brief Get default preference.
+ * \return default preference
+ */
+ uint8_t GetDefaultPreference () const;
- /**
- * \brief Get default preference.
- * \return default preference
- */
- uint8_t GetDefaultPreference () const;
-
- /**
- * \brief Set default preference.
- * \param defaultPreference default preference
- */
- void SetDefaultPreference (uint8_t defaultPreference);
+ /**
+ * \brief Set default preference.
+ * \param defaultPreference default preference
+ */
+ void SetDefaultPreference (uint8_t defaultPreference);
+
+ /**
+ * \brief Is source LLA option should be included in RA ?
+ * \return true if source address is added in RA, false otherwise
+ */
+ bool IsSourceLLAddress () const;
- /**
- * \brief Is source LLA option should be included in RA ?
- * \return true if source address is added in RA, false otherwise
- */
- bool IsSourceLLAddress () const;
-
- /**
- * \brief Set flag to add or not LLA to RA.
- * \param sourceLLAddress value
- */
- void SetSourceLLAddress (bool sourceLLAddress);
+ /**
+ * \brief Set flag to add or not LLA to RA.
+ * \param sourceLLAddress value
+ */
+ void SetSourceLLAddress (bool sourceLLAddress);
+
+ /**
+ * \brief Is "home agent" flag enabled ?
+ * \return "home agent" flag
+ */
+ bool IsHomeAgentFlag () const;
+
+ /**
+ * \brief Set "home agent" flag.
+ * \param homeAgentFlag value
+ */
+ void SetHomeAgentFlag (bool homeAgentFlag);
- /**
- * \brief Is "home agent" flag enabled ?
- * \return "home agent" flag
- */
- bool IsHomeAgentFlag () const;
-
- /**
- * \brief Set "home agent" flag.
- * \param homeAgentFlag value
- */
- void SetHomeAgentFlag (bool homeAgentFlag);
+ /**
+ * \brief Is Home Agent Information option should be included in RA ?
+ * \return true if HA information option is added in RA, false otherwise
+ */
+ bool IsHomeAgentInfo () const;
+
+ /**
+ * \brief Set flag to add or not HA information option to RA.
+ * \param homeAgentFlag value
+ */
+ void SetHomeAgentInfo (bool homeAgentFlag);
+
+ /**
+ * \brief Get home agent lifetime.
+ * \return home agent lifetime
+ */
+ uint32_t GetHomeAgentLifeTime () const;
+
+ /**
+ * \brief Set home agent lifetime.
+ * \param homeAgentLifeTime home agent lifetime
+ */
+ void SetHomeAgentLifeTime (uint32_t homeAgentLifeTime);
- /**
- * \brief Is Home Agent Information option should be included in RA ?
- * \return true if HA information option is added in RA, false otherwise
- */
- bool IsHomeAgentInfo () const;
-
- /**
- * \brief Set flag to add or not HA information option to RA.
- * \param homeAgentFlag value
- */
- void SetHomeAgentInfo (bool homeAgentFlag);
-
- /**
- * \brief Get home agent lifetime.
- * \return home agent lifetime
- */
- uint32_t GetHomeAgentLifeTime () const;
-
- /**
- * \brief Set home agent lifetime.
- * \param homeAgentLifeTime home agent lifetime
- */
- void SetHomeAgentLifeTime (uint32_t homeAgentLifeTime);
-
- /**
- * \brief Get home agent preference.
- * \return home agent preference
- */
- uint32_t GetHomeAgentPreference () const;
-
- /**
- * \brief Set home agent preference.
- * \param homeAgentPreference home agent preference
- */
- void SetHomeAgentPreference (uint32_t homeAgentPreference);
+ /**
+ * \brief Get home agent preference.
+ * \return home agent preference
+ */
+ uint32_t GetHomeAgentPreference () const;
+
+ /**
+ * \brief Set home agent preference.
+ * \param homeAgentPreference home agent preference
+ */
+ void SetHomeAgentPreference (uint32_t homeAgentPreference);
+
+ /**
+ * \brief Is "mobile router support" flag enabled ?
+ * \return "mobile router support" flag
+ */
+ bool IsMobRtrSupportFlag () const;
+
+ /**
+ * \brief Set "mobile router support" flag.
+ * \param mobRtrSupportFlag value
+ */
+ void SetMobRtrSupportFlag (bool mobRtrSupportFlag);
- /**
- * \brief Is "mobile router support" flag enabled ?
- * \return "mobile router support" flag
- */
- bool IsMobRtrSupportFlag () const;
-
- /**
- * \brief Set "mobile router support" flag.
- * \param mobRtrSupportFlag value
- */
- void SetMobRtrSupportFlag (bool mobRtrSupportFlag);
-
- /**
- * \brief Is advertisement interval option should be included in RA ?
- * \return true if advertisement interval option is added in RA, false otherwise
- */
- bool IsIntervalOpt () const;
-
- /**
- * \brief Set flag to add or not advertisement interval to RA.
- * \param intervalOpt value
- */
- void SetIntervalOpt (bool intervalOpt);
+ /**
+ * \brief Is advertisement interval option should be included in RA ?
+ * \return true if advertisement interval option is added in RA, false otherwise
+ */
+ bool IsIntervalOpt () const;
+
+ /**
+ * \brief Set flag to add or not advertisement interval to RA.
+ * \param intervalOpt value
+ */
+ void SetIntervalOpt (bool intervalOpt);
- private:
- typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
- typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
+private:
+ typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
+ typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
- /**
- * \brief Interface to advertise RA.
- */
- uint32_t m_interface;
+ /**
+ * \brief Interface to advertise RA.
+ */
+ uint32_t m_interface;
- /**
- * \brief List of prefixes to advertise.
- */
- RadvdPrefixList m_prefixes;
+ /**
+ * \brief List of prefixes to advertise.
+ */
+ RadvdPrefixList m_prefixes;
- /**
- * \brief Flag whether or not router sends periodic RA and respond to RS.
- */
- bool m_sendAdvert;
+ /**
+ * \brief Flag whether or not router sends periodic RA and respond to RS.
+ */
+ bool m_sendAdvert;
- /**
- * \brief Maximum RA interval in milliseconds.
- */
- uint32_t m_maxRtrAdvInterval;
+ /**
+ * \brief Maximum RA interval in milliseconds.
+ */
+ uint32_t m_maxRtrAdvInterval;
- /**
- * \brief Minimum RA interval in milliseconds.
- */
- uint32_t m_minRtrAdvInterval;
+ /**
+ * \brief Minimum RA interval in milliseconds.
+ */
+ uint32_t m_minRtrAdvInterval;
- /**
- * \brief Minimum delay between RA in milliseconds.
- */
- uint32_t m_minDelayBetweenRAs;
+ /**
+ * \brief Minimum delay between RA in milliseconds.
+ */
+ uint32_t m_minDelayBetweenRAs;
- /**
- * \brief Managed flag. If true host use the stateful protocol for address autoconfiguration.
- */
- bool m_managedFlag;
+ /**
+ * \brief Managed flag. If true host use the stateful protocol for address autoconfiguration.
+ */
+ bool m_managedFlag;
- /**
- * \brief Other configuration flag. If true host use stateful protocol for other (non-address) information.
- */
- bool m_otherConfigFlag;
+ /**
+ * \brief Other configuration flag. If true host use stateful protocol for other (non-address) information.
+ */
+ bool m_otherConfigFlag;
- /**
- * \brief Link MTU to use.
- */
- uint32_t m_linkMtu;
+ /**
+ * \brief Link MTU to use.
+ */
+ uint32_t m_linkMtu;
- /**
- * \brief Reachable time in milliseconds.
- */
- uint32_t m_reachableTime;
+ /**
+ * \brief Reachable time in milliseconds.
+ */
+ uint32_t m_reachableTime;
- /**
- * \brief Retransmission timer in milliseconds.
- */
- uint32_t m_retransTimer;
+ /**
+ * \brief Retransmission timer in milliseconds.
+ */
+ uint32_t m_retransTimer;
- /**
- * \brief Current hop limit (TTL).
- */
- uint32_t m_curHopLimit;
+ /**
+ * \brief Current hop limit (TTL).
+ */
+ uint32_t m_curHopLimit;
- /**
- * \brief Default life time in seconds.
- */
- uint32_t m_defaultLifeTime;
+ /**
+ * \brief Default life time in seconds.
+ */
+ uint32_t m_defaultLifeTime;
- /**
- * \brief Preference associated with default router.
- * 0 = low
- * 1 = medium
- * 2 = high
- */
- uint8_t m_defaultPreference;
+ /**
+ * \brief Preference associated with default router.
+ * 0 = low
+ * 1 = medium
+ * 2 = high
+ */
+ uint8_t m_defaultPreference;
- /**
- * \brief Flag to add link-layer address in RA.
- */
- bool m_sourceLLAddress;
+ /**
+ * \brief Flag to add link-layer address in RA.
+ */
+ bool m_sourceLLAddress;
- /**
- * \brief Flag to add HA (home agent) flag in RA.
- */
- bool m_homeAgentFlag;
+ /**
+ * \brief Flag to add HA (home agent) flag in RA.
+ */
+ bool m_homeAgentFlag;
- /**
- * \brief Flag to add Home Agent Information option (Mobile IPv6).
- * Currently not implemented.
- */
- bool m_homeAgentInfo;
+ /**
+ * \brief Flag to add Home Agent Information option (Mobile IPv6).
+ * Currently not implemented.
+ */
+ bool m_homeAgentInfo;
- /**
- * \brief Home agent lifetime in seconds. Ignored if home agent info is not set.
- */
- uint32_t m_homeAgentLifeTime;
+ /**
+ * \brief Home agent lifetime in seconds. Ignored if home agent info is not set.
+ */
+ uint32_t m_homeAgentLifeTime;
- /**
- * \brief Home agent preference. Ignored if home agent info is not set.
- */
- uint32_t m_homeAgentPreference;
+ /**
+ * \brief Home agent preference. Ignored if home agent info is not set.
+ */
+ uint32_t m_homeAgentPreference;
- /**
- * \brief Flag for HA to signals it supports Mobile Router registrations (NEMO Basic).
- */
- bool m_mobRtrSupportFlag;
+ /**
+ * \brief Flag for HA to signals it supports Mobile Router registrations (NEMO Basic).
+ */
+ bool m_mobRtrSupportFlag;
- /**
- * \brief Flag to add Advertisement Interval option in RA.
- */
- bool m_intervalOpt;
+ /**
+ * \brief Flag to add Advertisement Interval option in RA.
+ */
+ bool m_intervalOpt;
};
} /* namespace ns3 */
--- a/src/applications/radvd/radvd-prefix.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/applications/radvd/radvd-prefix.h Wed Dec 30 14:22:25 2009 +0100
@@ -36,144 +36,144 @@
*/
class RadvdPrefix : public SimpleRefCount<RadvdPrefix>
{
- public:
- /**
- * \brief Constructor.
- * \param network network prefix advertised
- * \param prefixLength prefix length ( 0 < x <= 128)
- * \param preferredLifeTime preferred life time in seconds (default 7 days)
- * \param validLifeTime valid life time in seconds (default 30 days)
- * \param onLinkFlag on link flag
- * \param autonomousFlag autonomous link flag
- * \param routerAddrFlag router address flag (for Mobile IPv6)
- */
- RadvdPrefix (Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime = 604800, uint32_t validLifeTime = 2592000, bool onLinkFlag = true, bool autonomousFlag = true, bool routerAddrFlag = false);
+public:
+ /**
+ * \brief Constructor.
+ * \param network network prefix advertised
+ * \param prefixLength prefix length ( 0 < x <= 128)
+ * \param preferredLifeTime preferred life time in seconds (default 7 days)
+ * \param validLifeTime valid life time in seconds (default 30 days)
+ * \param onLinkFlag on link flag
+ * \param autonomousFlag autonomous link flag
+ * \param routerAddrFlag router address flag (for Mobile IPv6)
+ */
+ RadvdPrefix (Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime = 604800, uint32_t validLifeTime = 2592000, bool onLinkFlag = true, bool autonomousFlag = true, bool routerAddrFlag = false);
- /**
- * \brief Destructor.
- */
- ~RadvdPrefix ();
+ /**
+ * \brief Destructor.
+ */
+ ~RadvdPrefix ();
- /**
- * \brief Get network prefix.
- * \return network prefix
- */
- Ipv6Address GetNetwork () const;
+ /**
+ * \brief Get network prefix.
+ * \return network prefix
+ */
+ Ipv6Address GetNetwork () const;
- /**
- * \brief Set network prefix.
- * \param network network prefix
- */
- void SetNetwork (Ipv6Address network);
+ /**
+ * \brief Set network prefix.
+ * \param network network prefix
+ */
+ void SetNetwork (Ipv6Address network);
- /**
- * \brief Get prefix length.
- * \return prefix length
- */
- uint8_t GetPrefixLength () const;
+ /**
+ * \brief Get prefix length.
+ * \return prefix length
+ */
+ uint8_t GetPrefixLength () const;
- /**
- * \brief Set prefix length.
- * \param prefixLength prefix length
- */
- void SetPrefixLength (uint8_t prefixLength);
+ /**
+ * \brief Set prefix length.
+ * \param prefixLength prefix length
+ */
+ void SetPrefixLength (uint8_t prefixLength);
- /**
- * \brief Get preferred lifetime.
- * \return lifetime
- */
- uint32_t GetPreferredLifeTime () const;
+ /**
+ * \brief Get preferred lifetime.
+ * \return lifetime
+ */
+ uint32_t GetPreferredLifeTime () const;
- /**
- * \brief Set preferred lifetime.
- * \param preferredLifeTime lifetime
- */
- void SetPreferredLifeTime (uint32_t preferredLifeTime);
+ /**
+ * \brief Set preferred lifetime.
+ * \param preferredLifeTime lifetime
+ */
+ void SetPreferredLifeTime (uint32_t preferredLifeTime);
- /**
- * \brief Get valid lifetime.
- * \return lifetime
- */
- uint32_t GetValidLifeTime () const;
+ /**
+ * \brief Get valid lifetime.
+ * \return lifetime
+ */
+ uint32_t GetValidLifeTime () const;
- /**
- * \brief Set valid lifetime.
- * \param validLifeTime lifetime
- */
- void SetValidLifeTime (uint32_t validLifeTime);
+ /**
+ * \brief Set valid lifetime.
+ * \param validLifeTime lifetime
+ */
+ void SetValidLifeTime (uint32_t validLifeTime);
- /**
- * \brief Is on-link flag ?
- * \return true if on-link is activated, false otherwise
- */
- bool IsOnLinkFlag () const;
+ /**
+ * \brief Is on-link flag ?
+ * \return true if on-link is activated, false otherwise
+ */
+ bool IsOnLinkFlag () const;
- /**
- * \brief Set on-link flag.
- * \param onLinkFlag value
- */
- void SetOnLinkFlag (bool onLinkFlag);
+ /**
+ * \brief Set on-link flag.
+ * \param onLinkFlag value
+ */
+ void SetOnLinkFlag (bool onLinkFlag);
- /**
- * \brief Is autonomous flag ?
- * \return true if autonomous is activated, false otherwise
- */
- bool IsAutonomousFlag () const;
+ /**
+ * \brief Is autonomous flag ?
+ * \return true if autonomous is activated, false otherwise
+ */
+ bool IsAutonomousFlag () const;
- /**
- * \brief Set autonomous flag.
- * \param autonomousFlag value
- */
- void SetAutonomousFlag (bool autonomousFlag);
+ /**
+ * \brief Set autonomous flag.
+ * \param autonomousFlag value
+ */
+ void SetAutonomousFlag (bool autonomousFlag);
- /**
- * \brief Is router address flag ?
- * \return true if router address is activated, false otherwise
- */
- bool IsRouterAddrFlag () const;
+ /**
+ * \brief Is router address flag ?
+ * \return true if router address is activated, false otherwise
+ */
+ bool IsRouterAddrFlag () const;
- /**
- * \brief Set router address flag.
- * \param routerAddrFlag value
- */
- void SetRouterAddrFlag (bool routerAddrFlag);
+ /**
+ * \brief Set router address flag.
+ * \param routerAddrFlag value
+ */
+ void SetRouterAddrFlag (bool routerAddrFlag);
- private:
- /**
- * \brief Network prefix.
- */
- Ipv6Address m_network;
+private:
+ /**
+ * \brief Network prefix.
+ */
+ Ipv6Address m_network;
- /**
- * \brief Prefix length.
- */
- uint8_t m_prefixLength;
+ /**
+ * \brief Prefix length.
+ */
+ uint8_t m_prefixLength;
- /**
- * \brief Preferred time.
- */
- uint32_t m_preferredLifeTime;
+ /**
+ * \brief Preferred time.
+ */
+ uint32_t m_preferredLifeTime;
- /**
- * \brief Valid time.
- */
- uint32_t m_validLifeTime;
+ /**
+ * \brief Valid time.
+ */
+ uint32_t m_validLifeTime;
- /**
- * \brief On link flag, indicates that this prefix can be used for on-link determination.
- */
- bool m_onLinkFlag;
+ /**
+ * \brief On link flag, indicates that this prefix can be used for on-link determination.
+ */
+ bool m_onLinkFlag;
- /**
- * \brief Autonomous flag, it is used for autonomous address configuration (RFC 2462).
- */
- bool m_autonomousFlag;
+ /**
+ * \brief Autonomous flag, it is used for autonomous address configuration (RFC 2462).
+ */
+ bool m_autonomousFlag;
- /**
- * \brief Router address flag, indicates that router address is sent instead
- * of network prefix as is required by Mobile IPv6.
- */
- bool m_routerAddrFlag;
+ /**
+ * \brief Router address flag, indicates that router address is sent instead
+ * of network prefix as is required by Mobile IPv6.
+ */
+ bool m_routerAddrFlag;
};
} /* namespace ns3 */
--- a/src/applications/radvd/radvd.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/applications/radvd/radvd.cc Wed Dec 30 14:22:25 2009 +0100
@@ -48,10 +48,10 @@
static TypeId tid = TypeId ("ns3::Radvd")
.SetParent<Application> ()
.AddConstructor<Radvd> ()
- ;
+ ;
return tid;
}
-
+
Radvd::Radvd ()
{
NS_LOG_FUNCTION_NOARGS ();
@@ -61,9 +61,9 @@
{
NS_LOG_FUNCTION_NOARGS ();
for (RadvdInterfaceListI it = m_configurations.begin () ; it != m_configurations.end () ; ++it)
- {
- *it = 0;
- }
+ {
+ *it = 0;
+ }
m_configurations.clear ();
m_socket = 0;
}
@@ -79,23 +79,23 @@
NS_LOG_FUNCTION_NOARGS ();
if (!m_socket)
- {
- TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
- m_socket = Socket::CreateSocket (GetNode (), tid);
+ {
+ TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
+ m_socket = Socket::CreateSocket (GetNode (), tid);
- NS_ASSERT (m_socket);
+ NS_ASSERT (m_socket);
-/* m_socket->Bind (Inet6SocketAddress (m_localAddress, 0)); */
-/* m_socket->Connect (Inet6SocketAddress (Ipv6Address::GetAllNodesMulticast (), 0)); */
- m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
- m_socket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
- }
+ /* m_socket->Bind (Inet6SocketAddress (m_localAddress, 0)); */
+ /* m_socket->Connect (Inet6SocketAddress (Ipv6Address::GetAllNodesMulticast (), 0)); */
+ m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
+ m_socket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
+ }
for (RadvdInterfaceListCI it = m_configurations.begin () ; it != m_configurations.end () ; it++)
- {
- m_eventIds[(*it)->GetInterface ()] = EventId ();
- ScheduleTransmit (Seconds (0.), (*it), m_eventIds[(*it)->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), true);
- }
+ {
+ m_eventIds[(*it)->GetInterface ()] = EventId ();
+ ScheduleTransmit (Seconds (0.), (*it), m_eventIds[(*it)->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), true);
+ }
}
void Radvd::StopApplication ()
@@ -103,14 +103,14 @@
NS_LOG_FUNCTION_NOARGS ();
if (m_socket)
- {
- m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
- }
+ {
+ m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
+ }
for (EventIdMapI it = m_eventIds.begin () ; it != m_eventIds.end () ; ++it)
- {
- Simulator::Cancel ((*it).second);
- }
+ {
+ Simulator::Cancel ((*it).second);
+ }
m_eventIds.clear ();
}
@@ -135,9 +135,9 @@
Icmpv6OptionPrefixInformation prefixHdr;
if (m_eventIds.size () == 0)
- {
- return;
- }
+ {
+ return;
+ }
std::list<Ptr<RadvdPrefix> > prefixes = config->GetPrefixes ();
Ptr<Packet> p = Create<Packet> ();
@@ -151,51 +151,51 @@
raHdr.SetLifeTime (config->GetDefaultLifeTime ());
raHdr.SetReachableTime (config->GetReachableTime ());
raHdr.SetRetransmissionTime (config->GetRetransTimer ());
-
+
if (config->IsSourceLLAddress ())
- {
- /* Get L2 address from NetDevice */
- Address addr = ipv6->GetNetDevice (config->GetInterface ())->GetAddress ();
- llaHdr = Icmpv6OptionLinkLayerAddress (true, addr);
- p->AddHeader (llaHdr);
- }
+ {
+ /* Get L2 address from NetDevice */
+ Address addr = ipv6->GetNetDevice (config->GetInterface ())->GetAddress ();
+ llaHdr = Icmpv6OptionLinkLayerAddress (true, addr);
+ p->AddHeader (llaHdr);
+ }
if (config->GetLinkMtu ())
- {
- NS_ASSERT (config->GetLinkMtu () >= 1280);
- mtuHdr = Icmpv6OptionMtu (config->GetLinkMtu ());
- p->AddHeader (mtuHdr);
- }
+ {
+ NS_ASSERT (config->GetLinkMtu () >= 1280);
+ mtuHdr = Icmpv6OptionMtu (config->GetLinkMtu ());
+ p->AddHeader (mtuHdr);
+ }
/* add list of prefixes */
for (std::list<Ptr<RadvdPrefix> >::const_iterator jt = prefixes.begin () ; jt != prefixes.end () ; jt++)
- {
- uint8_t flags = 0;
- prefixHdr = Icmpv6OptionPrefixInformation ();
- prefixHdr.SetPrefix ((*jt)->GetNetwork ());
- prefixHdr.SetPrefixLength ((*jt)->GetPrefixLength ());
- prefixHdr.SetValidTime ((*jt)->GetValidLifeTime ());
- prefixHdr.SetPreferredTime ((*jt)->GetPreferredLifeTime ());
+ {
+ uint8_t flags = 0;
+ prefixHdr = Icmpv6OptionPrefixInformation ();
+ prefixHdr.SetPrefix ((*jt)->GetNetwork ());
+ prefixHdr.SetPrefixLength ((*jt)->GetPrefixLength ());
+ prefixHdr.SetValidTime ((*jt)->GetValidLifeTime ());
+ prefixHdr.SetPreferredTime ((*jt)->GetPreferredLifeTime ());
+
+ if ((*jt)->IsOnLinkFlag ())
+ {
+ flags += 1 << 7;
+ }
- if ((*jt)->IsOnLinkFlag ())
- {
- flags += 1 << 7;
+ if ((*jt)->IsAutonomousFlag ())
+ {
+ flags += 1 << 6;
+ }
+
+ if ((*jt)->IsRouterAddrFlag ())
+ {
+ flags += 1 << 5;
+ }
+
+ prefixHdr.SetFlags (flags);
+
+ p->AddHeader (prefixHdr);
}
-
- if ((*jt)->IsAutonomousFlag ())
- {
- flags += 1 << 6;
- }
-
- if ((*jt)->IsRouterAddrFlag ())
- {
- flags += 1 << 5;
- }
-
- prefixHdr.SetFlags (flags);
-
- p->AddHeader (prefixHdr);
- }
Ipv6Address src = ipv6->GetAddress (config->GetInterface (), 0).GetAddress ();
m_socket->Bind (Inet6SocketAddress (src, 0));
@@ -220,13 +220,13 @@
m_socket->Send (p, 0);
if (reschedule)
- {
- UniformVariable rnd;
- uint64_t delay = static_cast<uint64_t> (rnd.GetValue (config->GetMinRtrAdvInterval (), config->GetMaxRtrAdvInterval ()) + 0.5);
- NS_LOG_INFO ("Reschedule in " << delay);
- Time t = MilliSeconds (delay);
- ScheduleTransmit (t, config, m_eventIds[config->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), reschedule);
- }
+ {
+ UniformVariable rnd;
+ uint64_t delay = static_cast<uint64_t> (rnd.GetValue (config->GetMinRtrAdvInterval (), config->GetMaxRtrAdvInterval ()) + 0.5);
+ NS_LOG_INFO ("Reschedule in " << delay);
+ Time t = MilliSeconds (delay);
+ ScheduleTransmit (t, config, m_eventIds[config->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), reschedule);
+ }
}
void Radvd::HandleRead (Ptr<Socket> socket)
@@ -236,45 +236,45 @@
Address from;
while (packet = socket->RecvFrom (from))
- {
- if (Inet6SocketAddress::IsMatchingType (from))
{
- Ipv6Header hdr;
- Icmpv6RS rsHdr;
- Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
- uint64_t delay = 0;
- UniformVariable rnd;
- Time t;
+ if (Inet6SocketAddress::IsMatchingType (from))
+ {
+ Ipv6Header hdr;
+ Icmpv6RS rsHdr;
+ Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
+ uint64_t delay = 0;
+ UniformVariable rnd;
+ Time t;
- packet->RemoveHeader (hdr);
- switch (*packet->PeekData ())
- {
- case Icmpv6Header::ICMPV6_ND_ROUTER_SOLICITATION:
- packet->RemoveHeader (rsHdr);
- NS_LOG_INFO ("Received ICMPv6 Router Solicitation from " << hdr.GetSourceAddress () << " code = " << (uint32_t)rsHdr.GetCode ());
+ packet->RemoveHeader (hdr);
+ switch (*packet->PeekData ())
+ {
+ case Icmpv6Header::ICMPV6_ND_ROUTER_SOLICITATION:
+ packet->RemoveHeader (rsHdr);
+ NS_LOG_INFO ("Received ICMPv6 Router Solicitation from " << hdr.GetSourceAddress () << " code = " << (uint32_t)rsHdr.GetCode ());
- /* XXX advertise just prefix(es) for the interface not all */
- for (RadvdInterfaceListCI it = m_configurations.begin () ; it != m_configurations.end () ; it++)
- {
- /* calculate minimum delay between RA */
- delay = static_cast<uint64_t> (rnd.GetValue (0, MAX_RA_DELAY_TIME) + 0.5);
- t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
-
- /* if our solicited RA is before the next periodic RA, we schedule it */
- if (t.GetTimeStep () < static_cast<int64_t> (m_eventIds[(*it)->GetInterface ()].GetTs ()))
- {
- NS_LOG_INFO ("schedule new RA");
- EventId ei;
-
- ScheduleTransmit (MilliSeconds (delay), (*it), ei, address.GetIpv6 (), false);
+ /* XXX advertise just prefix(es) for the interface not all */
+ for (RadvdInterfaceListCI it = m_configurations.begin () ; it != m_configurations.end () ; it++)
+ {
+ /* calculate minimum delay between RA */
+ delay = static_cast<uint64_t> (rnd.GetValue (0, MAX_RA_DELAY_TIME) + 0.5);
+ t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
+
+ /* if our solicited RA is before the next periodic RA, we schedule it */
+ if (t.GetTimeStep () < static_cast<int64_t> (m_eventIds[(*it)->GetInterface ()].GetTs ()))
+ {
+ NS_LOG_INFO ("schedule new RA");
+ EventId ei;
+
+ ScheduleTransmit (MilliSeconds (delay), (*it), ei, address.GetIpv6 (), false);
+ }
+ }
+ break;
+ default:
+ break;
}
- }
- break;
- default:
- break;
- }
+ }
}
- }
}
} /* namespace ns3 */
--- a/src/applications/radvd/radvd.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/applications/radvd/radvd.h Wed Dec 30 14:22:25 2009 +0100
@@ -45,97 +45,97 @@
*/
class Radvd : public Application
{
- public:
- /**
- * \brief Get the type ID.
- * \return type ID
- */
- static TypeId GetTypeId (void);
+public:
+ /**
+ * \brief Get the type ID.
+ * \return type ID
+ */
+ static TypeId GetTypeId (void);
- /**
- * \brief Constructor.
- */
- Radvd ();
+ /**
+ * \brief Constructor.
+ */
+ Radvd ();
- /**
- * \brief Destructor.
- */
- virtual ~Radvd ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Radvd ();
- /**
- * \brief Default value for maximum delay of RA (ms)
- */
- static const uint32_t MAX_RA_DELAY_TIME = 500;
+ /**
+ * \brief Default value for maximum delay of RA (ms)
+ */
+ static const uint32_t MAX_RA_DELAY_TIME = 500;
- /**
- * \brief Add configuration for an interface;
- * \param routerInterface configuration
- */
- void AddConfiguration (Ptr<RadvdInterface> routerInterface);
+ /**
+ * \brief Add configuration for an interface;
+ * \param routerInterface configuration
+ */
+ void AddConfiguration (Ptr<RadvdInterface> routerInterface);
- protected:
- /**
- * \brief Dispose the instance.
- */
- virtual void DoDispose ();
-
- private:
- typedef std::list<Ptr<RadvdInterface> > RadvdInterfaceList;
- typedef std::list<Ptr<RadvdInterface> >::iterator RadvdInterfaceListI;
- typedef std::list<Ptr<RadvdInterface> >::const_iterator RadvdInterfaceListCI;
+protected:
+ /**
+ * \brief Dispose the instance.
+ */
+ virtual void DoDispose ();
- typedef std::map<uint32_t, EventId> EventIdMap;
- typedef std::map<uint32_t, EventId>::iterator EventIdMapI;
- typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
+private:
+ typedef std::list<Ptr<RadvdInterface> > RadvdInterfaceList;
+ typedef std::list<Ptr<RadvdInterface> >::iterator RadvdInterfaceListI;
+ typedef std::list<Ptr<RadvdInterface> >::const_iterator RadvdInterfaceListCI;
+
+ typedef std::map<uint32_t, EventId> EventIdMap;
+ typedef std::map<uint32_t, EventId>::iterator EventIdMapI;
+ typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
- /**
- * \brief Start the application.
- */
- virtual void StartApplication ();
+ /**
+ * \brief Start the application.
+ */
+ virtual void StartApplication ();
- /**
- * \brief Stop the application.
- */
- virtual void StopApplication ();
+ /**
+ * \brief Stop the application.
+ */
+ virtual void StopApplication ();
- /**
- * \brief Schedule sending a packet.
- * \param dt interval between packet
- * \param config interface configuration
- * \param eventId event ID associated
- * \param dst IPv6 destination address
- * \param reschedule if true another send will be reschedule (periodic)
- */
- void ScheduleTransmit (Time dt, Ptr<RadvdInterface> config, EventId& eventId, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
+ /**
+ * \brief Schedule sending a packet.
+ * \param dt interval between packet
+ * \param config interface configuration
+ * \param eventId event ID associated
+ * \param dst IPv6 destination address
+ * \param reschedule if true another send will be reschedule (periodic)
+ */
+ void ScheduleTransmit (Time dt, Ptr<RadvdInterface> config, EventId& eventId, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
- /**
- * \brief Send a packet.
- * \param config interface configuration
- * \param dst destination address (default ff02::1)
- * \param reschedule if true another send will be reschedule (periodic)
- */
- void Send (Ptr<RadvdInterface> config, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
+ /**
+ * \brief Send a packet.
+ * \param config interface configuration
+ * \param dst destination address (default ff02::1)
+ * \param reschedule if true another send will be reschedule (periodic)
+ */
+ void Send (Ptr<RadvdInterface> config, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
- /**
- * \brief Handle received packet, especially router solicitation
- * \param socket socket to read data from
- */
- void HandleRead (Ptr<Socket> socket);
+ /**
+ * \brief Handle received packet, especially router solicitation
+ * \param socket socket to read data from
+ */
+ void HandleRead (Ptr<Socket> socket);
- /**
- * \brief Raw socket to send RA.
- */
- Ptr<Socket> m_socket;
+ /**
+ * \brief Raw socket to send RA.
+ */
+ Ptr<Socket> m_socket;
- /**
- * \brief List of configuration for interface.
- */
- RadvdInterfaceList m_configurations;
+ /**
+ * \brief List of configuration for interface.
+ */
+ RadvdInterfaceList m_configurations;
- /**
- * \brief Event ID map.
- */
- EventIdMap m_eventIds;
+ /**
+ * \brief Event ID map.
+ */
+ EventIdMap m_eventIds;
};
} /* namespace ns3 */
--- a/src/helper/ipv6-address-helper.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ipv6-address-helper.cc Wed Dec 30 14:22:25 2009 +0100
@@ -45,12 +45,12 @@
NS_LOG_FUNCTION (this << addr);
switch (addr.GetLength ())
- {
+ {
case 6:
return Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), m_network);
default:
return Ipv6Address ("::");
- }
+ }
/* never reached */
return Ipv6Address ("::");
}
@@ -69,31 +69,31 @@
Ipv6InterfaceContainer retval;
for (uint32_t i = 0; i < c.GetN (); ++i)
- {
- Ptr<NetDevice> device = c.Get (i);
+ {
+ Ptr<NetDevice> device = c.Get (i);
- Ptr<Node> node = device->GetNode ();
- NS_ASSERT_MSG (node, "Ipv6AddressHelper::Allocate (): Bad node");
+ Ptr<Node> node = device->GetNode ();
+ NS_ASSERT_MSG (node, "Ipv6AddressHelper::Allocate (): Bad node");
- Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
- NS_ASSERT_MSG (ipv6, "Ipv6AddressHelper::Allocate (): Bad ipv6");
- int32_t ifIndex = 0;
+ Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
+ NS_ASSERT_MSG (ipv6, "Ipv6AddressHelper::Allocate (): Bad ipv6");
+ int32_t ifIndex = 0;
- ifIndex = ipv6->GetInterfaceForDevice (device);
- if (ifIndex == -1)
- {
- ifIndex = ipv6->AddInterface (device);
- }
- NS_ASSERT_MSG (ifIndex >= 0, "Ipv6AddressHelper::Allocate (): "
- "Interface index not found");
+ ifIndex = ipv6->GetInterfaceForDevice (device);
+ if (ifIndex == -1)
+ {
+ ifIndex = ipv6->AddInterface (device);
+ }
+ NS_ASSERT_MSG (ifIndex >= 0, "Ipv6AddressHelper::Allocate (): "
+ "Interface index not found");
- Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (NewAddress (device->GetAddress ()), m_prefix);
- ipv6->SetMetric (ifIndex, 1);
- ipv6->SetUp (ifIndex);
- ipv6->AddAddress (ifIndex, ipv6Addr);
+ Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (NewAddress (device->GetAddress ()), m_prefix);
+ ipv6->SetMetric (ifIndex, 1);
+ ipv6->SetUp (ifIndex);
+ ipv6->AddAddress (ifIndex, ipv6Addr);
- retval.Add (ipv6, ifIndex);
- }
+ retval.Add (ipv6, ifIndex);
+ }
return retval;
}
@@ -102,34 +102,34 @@
NS_LOG_FUNCTION_NOARGS ();
Ipv6InterfaceContainer retval;
for (uint32_t i = 0; i < c.GetN (); ++i)
- {
- Ptr<NetDevice> device = c.Get (i);
+ {
+ Ptr<NetDevice> device = c.Get (i);
- Ptr<Node> node = device->GetNode ();
- NS_ASSERT_MSG (node, "Ipv6AddressHelper::Allocate (): Bad node");
+ Ptr<Node> node = device->GetNode ();
+ NS_ASSERT_MSG (node, "Ipv6AddressHelper::Allocate (): Bad node");
+
+ Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
+ NS_ASSERT_MSG (ipv6, "Ipv6AddressHelper::Allocate (): Bad ipv6");
- Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
- NS_ASSERT_MSG (ipv6, "Ipv6AddressHelper::Allocate (): Bad ipv6");
+ int32_t ifIndex = ipv6->GetInterfaceForDevice (device);
+ if (ifIndex == -1)
+ {
+ ifIndex = ipv6->AddInterface (device);
+ }
+ NS_ASSERT_MSG (ifIndex >= 0, "Ipv6AddressHelper::Allocate (): "
+ "Interface index not found");
- int32_t ifIndex = ipv6->GetInterfaceForDevice (device);
- if (ifIndex == -1)
- {
- ifIndex = ipv6->AddInterface (device);
+ ipv6->SetMetric (ifIndex, 1);
+ ipv6->SetUp (ifIndex);
+
+ if (withConfiguration.at (i))
+ {
+ Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (NewAddress (device->GetAddress ()), m_prefix);
+ ipv6->AddAddress (ifIndex, ipv6Addr);
+ }
+
+ retval.Add (ipv6, ifIndex);
}
- NS_ASSERT_MSG (ifIndex >= 0, "Ipv6AddressHelper::Allocate (): "
- "Interface index not found");
-
- ipv6->SetMetric (ifIndex, 1);
- ipv6->SetUp (ifIndex);
-
- if (withConfiguration.at (i))
- {
- Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (NewAddress (device->GetAddress ()), m_prefix);
- ipv6->AddAddress (ifIndex, ipv6Addr);
- }
-
- retval.Add (ipv6, ifIndex);
- }
return retval;
}
@@ -138,28 +138,28 @@
NS_LOG_FUNCTION_NOARGS ();
Ipv6InterfaceContainer retval;
for (uint32_t i = 0; i < c.GetN (); ++i)
- {
- Ptr<NetDevice> device = c.Get (i);
+ {
+ Ptr<NetDevice> device = c.Get (i);
- Ptr<Node> node = device->GetNode ();
- NS_ASSERT_MSG (node, "Ipv6AddressHelper::Allocate (): Bad node");
+ Ptr<Node> node = device->GetNode ();
+ NS_ASSERT_MSG (node, "Ipv6AddressHelper::Allocate (): Bad node");
- Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
- NS_ASSERT_MSG (ipv6, "Ipv6AddressHelper::Allocate (): Bad ipv6");
+ Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
+ NS_ASSERT_MSG (ipv6, "Ipv6AddressHelper::Allocate (): Bad ipv6");
- int32_t ifIndex = ipv6->GetInterfaceForDevice (device);
- if (ifIndex == -1)
- {
- ifIndex = ipv6->AddInterface (device);
+ int32_t ifIndex = ipv6->GetInterfaceForDevice (device);
+ if (ifIndex == -1)
+ {
+ ifIndex = ipv6->AddInterface (device);
+ }
+ NS_ASSERT_MSG (ifIndex >= 0, "Ipv6AddressHelper::Allocate (): "
+ "Interface index not found");
+
+ ipv6->SetMetric (ifIndex, 1);
+ ipv6->SetUp (ifIndex);
+
+ retval.Add (ipv6, ifIndex);
}
- NS_ASSERT_MSG (ifIndex >= 0, "Ipv6AddressHelper::Allocate (): "
- "Interface index not found");
-
- ipv6->SetMetric (ifIndex, 1);
- ipv6->SetUp (ifIndex);
-
- retval.Add (ipv6, ifIndex);
- }
return retval;
}
--- a/src/helper/ipv6-address-helper.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ipv6-address-helper.h Wed Dec 30 14:22:25 2009 +0100
@@ -37,60 +37,60 @@
*/
class Ipv6AddressHelper
{
- public:
- /**
- * \brief Constructor.
- */
- Ipv6AddressHelper ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Ipv6AddressHelper ();
- /**
- * \brief Allocate a new network.
- * \param network The IPv6 network
- * \param prefix The prefix
- */
- void NewNetwork (Ipv6Address network, Ipv6Prefix prefix);
+ /**
+ * \brief Allocate a new network.
+ * \param network The IPv6 network
+ * \param prefix The prefix
+ */
+ void NewNetwork (Ipv6Address network, Ipv6Prefix prefix);
- /**
- * \brief Allocate a new address.
- * \param addr L2 address (currenty only ethernet address is supported)
- * \return newly created Ipv6Address
- */
- Ipv6Address NewAddress (Address addr);
+ /**
+ * \brief Allocate a new address.
+ * \param addr L2 address (currenty only ethernet address is supported)
+ * \return newly created Ipv6Address
+ */
+ Ipv6Address NewAddress (Address addr);
- /**
- * \brief Allocate an Ipv6InterfaceContainer.
- * \param c netdevice container
- * \return newly created Ipv6InterfaceContainer
- */
- Ipv6InterfaceContainer Assign (const NetDeviceContainer &c);
+ /**
+ * \brief Allocate an Ipv6InterfaceContainer.
+ * \param c netdevice container
+ * \return newly created Ipv6InterfaceContainer
+ */
+ Ipv6InterfaceContainer Assign (const NetDeviceContainer &c);
- /**
- * \brief Allocate an Ipv6InterfaceContainer.
- * \param c netdevice container
- * \param withConfiguration true : interface statically configured, false : no static configuration
- * \return newly created Ipv6InterfaceContainer
- */
- Ipv6InterfaceContainer Assign (const NetDeviceContainer &c, std::vector<bool> withConfiguration);
+ /**
+ * \brief Allocate an Ipv6InterfaceContainer.
+ * \param c netdevice container
+ * \param withConfiguration true : interface statically configured, false : no static configuration
+ * \return newly created Ipv6InterfaceContainer
+ */
+ Ipv6InterfaceContainer Assign (const NetDeviceContainer &c, std::vector<bool> withConfiguration);
- /**
- * \brief Allocate an Ipv6InterfaceContainer without static IPv6 configuration.
- * \param c netdevice container
- * \return newly created Ipv6InterfaceContainer
- */
- Ipv6InterfaceContainer AssignWithoutAddress (const NetDeviceContainer &c);
+ /**
+ * \brief Allocate an Ipv6InterfaceContainer without static IPv6 configuration.
+ * \param c netdevice container
+ * \return newly created Ipv6InterfaceContainer
+ */
+ Ipv6InterfaceContainer AssignWithoutAddress (const NetDeviceContainer &c);
- private:
- /**
- * \internal
- * \brief The IPv6 network.
- */
- Ipv6Address m_network;
+private:
+ /**
+ * \internal
+ * \brief The IPv6 network.
+ */
+ Ipv6Address m_network;
- /**
- * \internal
- * \brief IPv6 The prefix (mask).
- */
- Ipv6Prefix m_prefix;
+ /**
+ * \internal
+ * \brief IPv6 The prefix (mask).
+ */
+ Ipv6Prefix m_prefix;
};
} /* namespace ns3 */
--- a/src/helper/ipv6-interface-container.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ipv6-interface-container.cc Wed Dec 30 14:22:25 2009 +0100
@@ -62,9 +62,9 @@
void Ipv6InterfaceContainer::Add (Ipv6InterfaceContainer& c)
{
for (InterfaceVector::const_iterator it = c.m_interfaces.begin () ; it != c.m_interfaces.end () ; it++)
- {
- m_interfaces.push_back (*it);
- }
+ {
+ m_interfaces.push_back (*it);
+ }
}
void Ipv6InterfaceContainer::SetRouter (uint32_t i, bool router)
@@ -73,24 +73,24 @@
ipv6->SetForwarding (m_interfaces[i].second, router);
if (router)
- {
- uint32_t other;
- /* assume first global address is index 1 (0 is link-local) */
- Ipv6Address routerAddress = ipv6->GetAddress (m_interfaces[i].second, 1).GetAddress ();
+ {
+ uint32_t other;
+ /* assume first global address is index 1 (0 is link-local) */
+ Ipv6Address routerAddress = ipv6->GetAddress (m_interfaces[i].second, 1).GetAddress ();
- for (other = 0 ; other < m_interfaces.size () ; other++)
- {
- if (other != i)
- {
- Ptr<Ipv6StaticRouting> routing = 0;
- Ipv6StaticRoutingHelper routingHelper;
+ for (other = 0 ; other < m_interfaces.size () ; other++)
+ {
+ if (other != i)
+ {
+ Ptr<Ipv6StaticRouting> routing = 0;
+ Ipv6StaticRoutingHelper routingHelper;
- ipv6 = m_interfaces[other].first;
- routing = routingHelper.GetStaticRouting (ipv6);
- routing->SetDefaultRoute (routerAddress, m_interfaces[other].second);
- }
+ ipv6 = m_interfaces[other].first;
+ routing = routingHelper.GetStaticRouting (ipv6);
+ routing->SetDefaultRoute (routerAddress, m_interfaces[other].second);
+ }
+ }
}
- }
}
void Ipv6InterfaceContainer::SetDefaultRoute (uint32_t i, uint32_t router)
--- a/src/helper/ipv6-interface-container.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ipv6-interface-container.h Wed Dec 30 14:22:25 2009 +0100
@@ -37,75 +37,75 @@
*/
class Ipv6InterfaceContainer
{
- public:
- /**
- * \brief Constructor.
- */
- Ipv6InterfaceContainer ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Ipv6InterfaceContainer ();
- /**
- * \brief Get the number of interfaces.
- * \return the number of interfaces stored in this Ipv6InterfaceContainer.
- */
- uint32_t GetN (void) const;
+ /**
+ * \brief Get the number of interfaces.
+ * \return the number of interfaces stored in this Ipv6InterfaceContainer.
+ */
+ uint32_t GetN (void) const;
- /**
- * \brief Get the interface index for the specified node index.
- * \param i index of the node
- * \return interface index
- */
- uint32_t GetInterfaceIndex (uint32_t i) const;
+ /**
+ * \brief Get the interface index for the specified node index.
+ * \param i index of the node
+ * \return interface index
+ */
+ uint32_t GetInterfaceIndex (uint32_t i) const;
- /**
- * \brief Get the address for the specified index.
- * \param i interface index
- * \param j address index, generally index 0 is the link-local address
- * \return IPv6 address
- */
- Ipv6Address GetAddress (uint32_t i, uint32_t j) const;
+ /**
+ * \brief Get the address for the specified index.
+ * \param i interface index
+ * \param j address index, generally index 0 is the link-local address
+ * \return IPv6 address
+ */
+ Ipv6Address GetAddress (uint32_t i, uint32_t j) const;
- /**
- * \brief Add a couple IPv6/interface.
- * \param ipv6 IPv6 address
- * \param interface interface index
- */
- void Add (Ptr<Ipv6> ipv6, uint32_t interface);
+ /**
+ * \brief Add a couple IPv6/interface.
+ * \param ipv6 IPv6 address
+ * \param interface interface index
+ */
+ void Add (Ptr<Ipv6> ipv6, uint32_t interface);
- /**
- * \brief Fusion with another Ipv6InterfaceContainer.
- * \param c container
- */
- void Add (Ipv6InterfaceContainer& c);
+ /**
+ * \brief Fusion with another Ipv6InterfaceContainer.
+ * \param c container
+ */
+ void Add (Ipv6InterfaceContainer& c);
- /**
- * \brief Add a couple of name/interface.
- * \param ipv6Name name of a node
- * \param interface interface index to add
- */
- void Add (std::string ipv6Name, uint32_t interface);
+ /**
+ * \brief Add a couple of name/interface.
+ * \param ipv6Name name of a node
+ * \param interface interface index to add
+ */
+ void Add (std::string ipv6Name, uint32_t interface);
- /**
- * \brief Set the state of the stack (act as a router or not) for the specified index.
- * \param i index
- * \param router true : is a router, false : is an host
- */
- void SetRouter (uint32_t i, bool router);
+ /**
+ * \brief Set the state of the stack (act as a router or not) for the specified index.
+ * \param i index
+ * \param router true : is a router, false : is an host
+ */
+ void SetRouter (uint32_t i, bool router);
- /**
- * \brief Set the default route for the specified index.
- * \param i index
- * \param router the default router
- */
- void SetDefaultRoute (uint32_t i, uint32_t router);
+ /**
+ * \brief Set the default route for the specified index.
+ * \param i index
+ * \param router the default router
+ */
+ void SetDefaultRoute (uint32_t i, uint32_t router);
- private:
- typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> > InterfaceVector;
+private:
+ typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> > InterfaceVector;
- /**
- * \internal
- * \brief List of IPv6 stack and interfaces index.
- */
- InterfaceVector m_interfaces;
+ /**
+ * \internal
+ * \brief List of IPv6 stack and interfaces index.
+ */
+ InterfaceVector m_interfaces;
};
} /* namespace ns3 */
--- a/src/helper/ipv6-list-routing-helper.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ipv6-list-routing-helper.h Wed Dec 30 14:22:25 2009 +0100
@@ -45,7 +45,7 @@
/**
* \internal
- * Destroy an Ipv6 Ipv6ListRoutingHelper.
+ * \brief Destroy an Ipv6 Ipv6ListRoutingHelper.
*/
virtual ~Ipv6ListRoutingHelper ();
--- a/src/helper/ipv6-routing-helper.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ipv6-routing-helper.h Wed Dec 30 14:22:25 2009 +0100
@@ -43,7 +43,7 @@
/**
* \internal
- * Destroy an Ipv6 Ipv6RoutingHelper.
+ * \brief Destroy an Ipv6 Ipv6RoutingHelper.
*/
virtual ~Ipv6RoutingHelper ();
--- a/src/helper/ping6-helper.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ping6-helper.cc Wed Dec 30 14:22:25 2009 +0100
@@ -51,16 +51,16 @@
{
ApplicationContainer apps;
for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
- {
- Ptr<Node> node = *i;
- Ptr<Ping6> client = m_factory.Create<Ping6> ();
- client->SetLocal (m_localIp);
- client->SetRemote (m_remoteIp);
- client->SetIfIndex (m_ifIndex);
- client->SetRouters (m_routers);
- node->AddApplication (client);
- apps.Add (client);
- }
+ {
+ Ptr<Node> node = *i;
+ Ptr<Ping6> client = m_factory.Create<Ping6> ();
+ client->SetLocal (m_localIp);
+ client->SetRemote (m_remoteIp);
+ client->SetIfIndex (m_ifIndex);
+ client->SetRouters (m_routers);
+ node->AddApplication (client);
+ apps.Add (client);
+ }
return apps;
}
--- a/src/helper/ping6-helper.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/helper/ping6-helper.h Wed Dec 30 14:22:25 2009 +0100
@@ -37,78 +37,78 @@
*/
class Ping6Helper
{
- public:
- /**
- * \brief Constructor.
- */
- Ping6Helper ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Ping6Helper ();
- /**
- * \brief Set the local IPv6 address.
- * \param ip local IPv6 address
- */
- void SetLocal (Ipv6Address ip);
+ /**
+ * \brief Set the local IPv6 address.
+ * \param ip local IPv6 address
+ */
+ void SetLocal (Ipv6Address ip);
- /**
- * \brief Set the remote IPv6 address.
- * \param ip remote IPv6 address
- */
- void SetRemote (Ipv6Address ip);
+ /**
+ * \brief Set the remote IPv6 address.
+ * \param ip remote IPv6 address
+ */
+ void SetRemote (Ipv6Address ip);
- /**
- * \brief Set some attributes.
- * \param name attribute name
- * \param value attribute value
- */
- void SetAttribute (std::string name, const AttributeValue& value);
+ /**
+ * \brief Set some attributes.
+ * \param name attribute name
+ * \param value attribute value
+ */
+ void SetAttribute (std::string name, const AttributeValue& value);
- /**
- * \brief Install the application in Nodes.
- * \param c list of Nodes
- * \return application container
- */
- ApplicationContainer Install (NodeContainer c);
+ /**
+ * \brief Install the application in Nodes.
+ * \param c list of Nodes
+ * \return application container
+ */
+ ApplicationContainer Install (NodeContainer c);
- /**
- * \brief Set the out interface index.
- * This is to send to link-local (unicast or multicast) address
- * when a node has multiple interfaces.
- * \param ifIndex interface index
- */
- void SetIfIndex (uint32_t ifIndex);
+ /**
+ * \brief Set the out interface index.
+ * This is to send to link-local (unicast or multicast) address
+ * when a node has multiple interfaces.
+ * \param ifIndex interface index
+ */
+ void SetIfIndex (uint32_t ifIndex);
- /**
- * \brief Set routers addresses for routing type 0.
- * \param routers routers addresses
- */
- void SetRoutersAddress(std::vector<Ipv6Address> routers);
-
- private:
- /**
- * \brief An object factory.
- */
- ObjectFactory m_factory;
+ /**
+ * \brief Set routers addresses for routing type 0.
+ * \param routers routers addresses
+ */
+ void SetRoutersAddress(std::vector<Ipv6Address> routers);
+
+private:
+ /**
+ * \brief An object factory.
+ */
+ ObjectFactory m_factory;
- /**
- * \brief The local IPv6 address.
- */
- Ipv6Address m_localIp;
+ /**
+ * \brief The local IPv6 address.
+ */
+ Ipv6Address m_localIp;
- /**
- * \brief The remote IPv6 address.
- */
- Ipv6Address m_remoteIp;
+ /**
+ * \brief The remote IPv6 address.
+ */
+ Ipv6Address m_remoteIp;
- /**
- * \brief Out interface index.
- */
- uint32_t m_ifIndex;
+ /**
+ * \brief Out interface index.
+ */
+ uint32_t m_ifIndex;
- /**
- * \brief Routers addresses.
- */
- std::vector<Ipv6Address> m_routers;
+ /**
+ * \brief Routers addresses.
+ */
+ std::vector<Ipv6Address> m_routers;
};
} /* namespace ns3 */
--- a/src/internet-stack/icmpv6-header.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/icmpv6-header.cc Wed Dec 30 14:22:25 2009 +0100
@@ -124,13 +124,13 @@
#endif
if (m_calcChecksum)
- {
- i = start;
- uint16_t checksum = i.CalculateIpChecksum (i.GetSize (), m_checksum);
- i = start;
- i.Next (2);
- i.WriteU16 (checksum);
- }
+ {
+ i = start;
+ uint16_t checksum = i.CalculateIpChecksum (i.GetSize (), m_checksum);
+ i = start;
+ i.Next (2);
+ i.WriteU16 (checksum);
+ }
}
void Icmpv6Header::CalculatePseudoHeaderChecksum (Ipv6Address src, Ipv6Address dst, uint16_t length, uint8_t protocol)
@@ -192,7 +192,7 @@
/* test */
/*
m_reserved = 0xdeadbeef;
- */
+ */
}
Icmpv6NS::~Icmpv6NS ()
@@ -244,13 +244,13 @@
i.Write (buff_target, 16);
if (m_calcChecksum)
- {
- i = start;
- checksum = i.CalculateIpChecksum (i.GetSize (), m_checksum);
- i = start;
- i.Next (2);
- i.WriteU16 (checksum);
- }
+ {
+ i = start;
+ checksum = i.CalculateIpChecksum (i.GetSize (), m_checksum);
+ i = start;
+ i.Next (2);
+ i.WriteU16 (checksum);
+ }
}
uint32_t Icmpv6NS::Deserialize (Buffer::Iterator start)
@@ -371,32 +371,32 @@
i.WriteU16 (0);
if (m_flagR)
- {
- reserved |= (uint32_t)(1 << 31);
- }
+ {
+ reserved |= (uint32_t)(1 << 31);
+ }
if (m_flagS)
- {
- reserved |= (uint32_t)(1<< 30);
- }
+ {
+ reserved |= (uint32_t)(1<< 30);
+ }
if (m_flagO)
- {
- reserved |= (uint32_t)(1<< 29);
- }
+ {
+ reserved |= (uint32_t)(1<< 29);
+ }
i.WriteHtonU32 (reserved);
m_target.Serialize (buff_target);
i.Write (buff_target, 16);
if (m_calcChecksum)
- {
- i = start;
- checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
- i = start;
- i.Next (2);
- i.WriteU16 (checksum);
- }
+ {
+ i = start;
+ checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
+ i = start;
+ i.Next (2);
+ i.WriteU16 (checksum);
+ }
}
uint32_t Icmpv6NA::Deserialize (Buffer::Iterator start)
@@ -414,19 +414,19 @@
m_flagO = false;
if (m_reserved & (1 << 31))
- {
- m_flagR = true;
- }
+ {
+ m_flagR = true;
+ }
if (m_reserved & (1 << 30))
- {
- m_flagS = true;
- }
+ {
+ m_flagS = true;
+ }
if (m_reserved & (1 << 29))
- {
- m_flagO = true;
- }
+ {
+ m_flagO = true;
+ }
i.Read (buf, 16);
m_target.Set (buf);
@@ -570,19 +570,19 @@
i.WriteU8 (m_curHopLimit);
if (m_flagM)
- {
- flags |= (uint8_t)(1<< 7);
- }
+ {
+ flags |= (uint8_t)(1<< 7);
+ }
if (m_flagO)
- {
- flags |= (uint8_t)(1<< 6);
- }
+ {
+ flags |= (uint8_t)(1<< 6);
+ }
if (m_flagH)
- {
- flags |= (uint8_t)(1<< 5);
- }
+ {
+ flags |= (uint8_t)(1<< 5);
+ }
i.WriteU8 (flags);
i.WriteHtonU16 (GetLifeTime ());
i.WriteHtonU32 (GetReachableTime ());
@@ -610,19 +610,19 @@
m_flagH = false;
if (m_flags & (1 << 7))
- {
- m_flagM = true;
- }
+ {
+ m_flagM = true;
+ }
if (m_flags & (1 << 6))
- {
- m_flagO = true;
- }
+ {
+ m_flagO = true;
+ }
if (m_flags & (1 << 5))
- {
- m_flagH = true;
- }
+ {
+ m_flagH = true;
+ }
SetLifeTime (i.ReadNtohU16 ());
SetReachableTime (i.ReadNtohU32 ());
SetRetransmissionTime (i.ReadNtohU32 ());
@@ -689,14 +689,14 @@
i.WriteHtonU32 (m_reserved);
if (m_calcChecksum)
- {
- i = start;
- checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
-
- i = start;
- i.Next (2);
- i.WriteU16 (checksum);
- }
+ {
+ i = start;
+ checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
+
+ i = start;
+ i.Next (2);
+ i.WriteU16 (checksum);
+ }
}
uint32_t Icmpv6RS::Deserialize (Buffer::Iterator start)
@@ -800,14 +800,14 @@
i.Write (buff, 16);
if (m_calcChecksum)
- {
- i = start;
- checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
+ {
+ i = start;
+ checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
- i = start;
- i.Next (2);
- i.WriteU16 (checksum);
- }
+ i = start;
+ i.Next (2);
+ i.WriteU16 (checksum);
+ }
}
uint32_t Icmpv6Redirection::Deserialize (Buffer::Iterator start)
@@ -912,13 +912,13 @@
i.WriteHtonU16 (m_seq);
if (m_calcChecksum)
- {
- i = start;
- checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
- i = start;
- i.Next (2);
- i.WriteU16 (checksum);
- }
+ {
+ i = start;
+ checksum = i.CalculateIpChecksum (i.GetSize (), GetChecksum ());
+ i = start;
+ i.Next (2);
+ i.WriteU16 (checksum);
+ }
}
uint32_t Icmpv6Echo::Deserialize (Buffer::Iterator start)
@@ -1215,7 +1215,7 @@
Icmpv6ParameterError::Icmpv6ParameterError ()
: m_packet (0),
- m_ptr (0)
+ m_ptr (0)
{
SetType (ICMPV6_ERROR_PARAMETER_ERROR);
}
--- a/src/internet-stack/icmpv6-header.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/icmpv6-header.h Wed Dec 30 14:22:25 2009 +0100
@@ -36,202 +36,202 @@
*/
class Icmpv6Header : public Header
{
- public:
- /**
- * \enum Type_e
- * \brief ICMPv6 type code.
- */
- enum Type_e
- {
- ICMPV6_ERROR_DESTINATION_UNREACHABLE = 1,
- ICMPV6_ERROR_PACKET_TOO_BIG,
- ICMPV6_ERROR_TIME_EXCEEDED,
- ICMPV6_ERROR_PARAMETER_ERROR,
- ICMPV6_ECHO_REQUEST = 128,
- ICMPV6_ECHO_REPLY,
- ICMPV6_SUBSCRIBE_REQUEST,
- ICMPV6_SUBSCRIBE_REPORT,
- ICMPV6_SUBSCRIVE_END,
- ICMPV6_ND_ROUTER_SOLICITATION,
- ICMPV6_ND_ROUTER_ADVERTISEMENT,
- ICMPV6_ND_NEIGHBOR_SOLICITATION,
- ICMPV6_ND_NEIGHBOR_ADVERTISEMENT,
- ICMPV6_ND_REDIRECTION,
- ICMPV6_ROUTER_RENUMBER,
- ICMPV6_INFORMATION_REQUEST,
- ICMPV6_INFORMATION_RESPONSE,
- ICMPV6_INVERSE_ND_SOLICITATION,
- ICMPV6_INVERSE_ND_ADVERSTISEMENT,
- ICMPV6_MLDV2_SUBSCRIBE_REPORT,
- ICMPV6_MOBILITY_HA_DISCOVER_REQUEST,
- ICMPV6_MOBILITY_HA_DISCOVER_RESPONSE,
- ICMPV6_MOBILITY_MOBILE_PREFIX_SOLICITATION,
- ICMPV6_SECURE_ND_CERTIFICATE_PATH_SOLICITATION,
- ICMPV6_SECURE_ND_CERTIFICATE_PATH_ADVERTISEMENT,
- ICMPV6_EXPERIMENTAL_MOBILITY
- };
+public:
+ /**
+ * \enum Type_e
+ * \brief ICMPv6 type code.
+ */
+ enum Type_e
+ {
+ ICMPV6_ERROR_DESTINATION_UNREACHABLE = 1,
+ ICMPV6_ERROR_PACKET_TOO_BIG,
+ ICMPV6_ERROR_TIME_EXCEEDED,
+ ICMPV6_ERROR_PARAMETER_ERROR,
+ ICMPV6_ECHO_REQUEST = 128,
+ ICMPV6_ECHO_REPLY,
+ ICMPV6_SUBSCRIBE_REQUEST,
+ ICMPV6_SUBSCRIBE_REPORT,
+ ICMPV6_SUBSCRIVE_END,
+ ICMPV6_ND_ROUTER_SOLICITATION,
+ ICMPV6_ND_ROUTER_ADVERTISEMENT,
+ ICMPV6_ND_NEIGHBOR_SOLICITATION,
+ ICMPV6_ND_NEIGHBOR_ADVERTISEMENT,
+ ICMPV6_ND_REDIRECTION,
+ ICMPV6_ROUTER_RENUMBER,
+ ICMPV6_INFORMATION_REQUEST,
+ ICMPV6_INFORMATION_RESPONSE,
+ ICMPV6_INVERSE_ND_SOLICITATION,
+ ICMPV6_INVERSE_ND_ADVERSTISEMENT,
+ ICMPV6_MLDV2_SUBSCRIBE_REPORT,
+ ICMPV6_MOBILITY_HA_DISCOVER_REQUEST,
+ ICMPV6_MOBILITY_HA_DISCOVER_RESPONSE,
+ ICMPV6_MOBILITY_MOBILE_PREFIX_SOLICITATION,
+ ICMPV6_SECURE_ND_CERTIFICATE_PATH_SOLICITATION,
+ ICMPV6_SECURE_ND_CERTIFICATE_PATH_ADVERTISEMENT,
+ ICMPV6_EXPERIMENTAL_MOBILITY
+ };
- /**
- * \enum OptionType_e
- * \brief ICMPv6 Option type code.
- */
- enum OptionType_e
- {
- ICMPV6_OPT_LINK_LAYER_SOURCE = 1,
- ICMPV6_OPT_LINK_LAYER_TARGET,
- ICMPV6_OPT_PREFIX,
- ICMPV6_OPT_REDIRECTED,
- ICMPV6_OPT_MTU
- };
+ /**
+ * \enum OptionType_e
+ * \brief ICMPv6 Option type code.
+ */
+ enum OptionType_e
+ {
+ ICMPV6_OPT_LINK_LAYER_SOURCE = 1,
+ ICMPV6_OPT_LINK_LAYER_TARGET,
+ ICMPV6_OPT_PREFIX,
+ ICMPV6_OPT_REDIRECTED,
+ ICMPV6_OPT_MTU
+ };
- /**
- * \enum ErrorDestinationUnreachable_e
- * \brief ICMPv6 error code : Destination Unreachable
- */
- enum ErrorDestinationUnreachable_e
- {
- ICMPV6_NO_ROUTE = 0,
- ICMPV6_ADM_PROHIBITED,
- ICMPV6_NOT_NEIGHBOUR,
- ICMPV6_ADDR_UNREACHABLE,
- ICMPV6_PORT_UNREACHABLE
- };
+ /**
+ * \enum ErrorDestinationUnreachable_e
+ * \brief ICMPv6 error code : Destination Unreachable
+ */
+ enum ErrorDestinationUnreachable_e
+ {
+ ICMPV6_NO_ROUTE = 0,
+ ICMPV6_ADM_PROHIBITED,
+ ICMPV6_NOT_NEIGHBOUR,
+ ICMPV6_ADDR_UNREACHABLE,
+ ICMPV6_PORT_UNREACHABLE
+ };
- /**
- * \enum ErrorTimeExceeded_e
- * \brief ICMPv6 error code : Time Exceeded
- */
- enum ErrorTimeExceeded_e
- {
- ICMPV6_HOPLIMIT = 0,
- ICMPV6_FRAGTIME
- };
+ /**
+ * \enum ErrorTimeExceeded_e
+ * \brief ICMPv6 error code : Time Exceeded
+ */
+ enum ErrorTimeExceeded_e
+ {
+ ICMPV6_HOPLIMIT = 0,
+ ICMPV6_FRAGTIME
+ };
- /**
- * \enum ErrorParameterError_e
- * \brief ICMPv6 error code : Parameter Error
- */
- enum ErrorParameterError_e
- {
- ICMPV6_MALFORMED_HEADER = 0,
- ICMPV6_UNKNOWN_NEXT_HEADER,
- ICMPV6_UNKNOWN_OPTION
- };
+ /**
+ * \enum ErrorParameterError_e
+ * \brief ICMPv6 error code : Parameter Error
+ */
+ enum ErrorParameterError_e
+ {
+ ICMPV6_MALFORMED_HEADER = 0,
+ ICMPV6_UNKNOWN_NEXT_HEADER,
+ ICMPV6_UNKNOWN_OPTION
+ };
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Icmpv6Header ();
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6Header ();
+
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6Header ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6Header ();
+ /**
+ * \brief Get the type field.
+ * \return type of ICMPv6 message
+ */
+ uint8_t GetType () const;
- /**
- * \brief Get the type field.
- * \return type of ICMPv6 message
- */
- uint8_t GetType () const;
+ /**
+ * \brief Set the type.
+ * \param type type to set
+ */
+ void SetType (uint8_t type);
- /**
- * \brief Set the type.
- * \param type type to set
- */
- void SetType (uint8_t type);
+ /**
+ * \brief Get the code field.
+ * \return code of ICMPv6 message
+ */
+ uint8_t GetCode () const;
- /**
- * \brief Get the code field.
- * \return code of ICMPv6 message
- */
- uint8_t GetCode () const;
+ /**
+ * \brief Set the code field.
+ * \param code code to set
+ */
+ void SetCode (uint8_t code);
- /**
- * \brief Set the code field.
- * \param code code to set
- */
- void SetCode (uint8_t code);
+ /**
+ * \brief Get the checksum.
+ * \return checksum
+ */
+ uint16_t GetChecksum () const;
- /**
- * \brief Get the checksum.
- * \return checksum
- */
- uint16_t GetChecksum () const;
+ /**
+ * \brief Set the checksum.
+ * \param checksum to set
+ */
+ void SetChecksum (uint16_t checksum);
- /**
- * \brief Set the checksum.
- * \param checksum to set
- */
- void SetChecksum (uint16_t checksum);
-
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
+
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
-
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- /**
- * \brief Calculate pseudo header checksum for IPv6.
- * \param src source address
- * \param dst destination address
- * \param length length
- * \param protocol the protocol number to use in the
- * underlying IPv6 packet.
- */
- void CalculatePseudoHeaderChecksum (Ipv6Address src, Ipv6Address dst, uint16_t length, uint8_t protocol);
+ /**
+ * \brief Calculate pseudo header checksum for IPv6.
+ * \param src source address
+ * \param dst destination address
+ * \param length length
+ * \param protocol the protocol number to use in the
+ * underlying IPv6 packet.
+ */
+ void CalculatePseudoHeaderChecksum (Ipv6Address src, Ipv6Address dst, uint16_t length, uint8_t protocol);
- protected:
- /**
- * \brief Checksum enable or not.
- */
- bool m_calcChecksum;
+protected:
+ /**
+ * \brief Checksum enable or not.
+ */
+ bool m_calcChecksum;
- /**
- * \brief The checksum.
- */
- uint16_t m_checksum;
-
- private:
- /**
- * \brief The type.
- */
- uint8_t m_type;
+ /**
+ * \brief The checksum.
+ */
+ uint16_t m_checksum;
- /**
- * \brief The code.
- */
- uint8_t m_code;
+private:
+ /**
+ * \brief The type.
+ */
+ uint8_t m_type;
+
+ /**
+ * \brief The code.
+ */
+ uint8_t m_code;
};
/**
@@ -240,88 +240,88 @@
*/
class Icmpv6OptionHeader : public Header
{
- public:
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Icmpv6OptionHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6OptionHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6OptionHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6OptionHeader ();
- /**
- * \brief Get the type of the option.
- * \return type
- */
- uint8_t GetType () const;
+ /**
+ * \brief Get the type of the option.
+ * \return type
+ */
+ uint8_t GetType () const;
- /**
- * \brief Set the type of the option.
- * \param type the type to set
- */
- void SetType (uint8_t type);
+ /**
+ * \brief Set the type of the option.
+ * \param type the type to set
+ */
+ void SetType (uint8_t type);
- /**
- * \brief Get the length of the option in 8 bytes unit.
- * \return length of the option
- */
- uint8_t GetLength () const;
+ /**
+ * \brief Get the length of the option in 8 bytes unit.
+ * \return length of the option
+ */
+ uint8_t GetLength () const;
- /**
- * \brief Set the length of the option.
- * \param len length value to set
- */
- void SetLength (uint8_t len);
+ /**
+ * \brief Set the length of the option.
+ * \param len length value to set
+ */
+ void SetLength (uint8_t len);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The type.
- */
- uint8_t m_type;
+private:
+ /**
+ * \brief The type.
+ */
+ uint8_t m_type;
- /**
- * \brief The length.
- */
- uint8_t m_len;
+ /**
+ * \brief The length.
+ */
+ uint8_t m_len;
};
/**
@@ -330,95 +330,95 @@
*/
class Icmpv6NS : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- * \param target target IPv6 address
- */
- Icmpv6NS (Ipv6Address target);
+public:
+ /**
+ * \brief Constructor.
+ * \param target target IPv6 address
+ */
+ Icmpv6NS (Ipv6Address target);
- /**
- * \brief Constructor.
- */
- Icmpv6NS ();
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6NS ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6NS ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6NS ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the reserved field.
- * \return reserved value
- */
- uint32_t GetReserved () const;
+ /**
+ * \brief Get the reserved field.
+ * \return reserved value
+ */
+ uint32_t GetReserved () const;
- /**
- * \brief Set the reserved field.
- * \param reserved the reserved value
- */
- void SetReserved (uint32_t reserved);
+ /**
+ * \brief Set the reserved field.
+ * \param reserved the reserved value
+ */
+ void SetReserved (uint32_t reserved);
- /**
- * \brief Get the IPv6 target field.
- * \return IPv6 address
- */
- Ipv6Address GetIpv6Target () const;
+ /**
+ * \brief Get the IPv6 target field.
+ * \return IPv6 address
+ */
+ Ipv6Address GetIpv6Target () const;
- /**
- * \brief Set the IPv6 target field.
- * \param target IPv6 address
- */
- void SetIpv6Target (Ipv6Address target);
+ /**
+ * \brief Set the IPv6 target field.
+ * \param target IPv6 address
+ */
+ void SetIpv6Target (Ipv6Address target);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
+private:
- /**
- * \brief The reserved value.
- */
- uint32_t m_reserved;
+ /**
+ * \brief The reserved value.
+ */
+ uint32_t m_reserved;
- /**
- * \brief The IPv6 target address.
- */
- Ipv6Address m_target;
+ /**
+ * \brief The IPv6 target address.
+ */
+ Ipv6Address m_target;
};
/**
@@ -427,139 +427,139 @@
*/
class Icmpv6NA : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6NA ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6NA ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6NA ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6NA ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the reserved field.
- * \return reserved value
- */
- uint32_t GetReserved () const;
+ /**
+ * \brief Get the reserved field.
+ * \return reserved value
+ */
+ uint32_t GetReserved () const;
- /**
- * \brief Set the reserved field.
- * \param reserved the reserved value
- */
- void SetReserved (uint32_t reserved);
+ /**
+ * \brief Set the reserved field.
+ * \param reserved the reserved value
+ */
+ void SetReserved (uint32_t reserved);
- /**
- * \brief Get the IPv6 target field.
- * \return IPv6 address
- */
- Ipv6Address GetIpv6Target () const;
+ /**
+ * \brief Get the IPv6 target field.
+ * \return IPv6 address
+ */
+ Ipv6Address GetIpv6Target () const;
- /**
- * \brief Set the IPv6 target field.
- * \param target IPv6 address
- */
- void SetIpv6Target (Ipv6Address target);
+ /**
+ * \brief Set the IPv6 target field.
+ * \param target IPv6 address
+ */
+ void SetIpv6Target (Ipv6Address target);
- /**
- * \brief Get the R flag.
- * \return R flag
- */
- bool GetFlagR () const;
+ /**
+ * \brief Get the R flag.
+ * \return R flag
+ */
+ bool GetFlagR () const;
- /**
- * \brief Set the R flag.
- * \param r value
- */
- void SetFlagR (bool r);
+ /**
+ * \brief Set the R flag.
+ * \param r value
+ */
+ void SetFlagR (bool r);
- /**
- * \brief Get the S flag.
- * \return S flag
- */
- bool GetFlagS () const;
+ /**
+ * \brief Get the S flag.
+ * \return S flag
+ */
+ bool GetFlagS () const;
- /**
- * \brief Set the S flag.
- * \param s value
- */
- void SetFlagS (bool s);
+ /**
+ * \brief Set the S flag.
+ * \param s value
+ */
+ void SetFlagS (bool s);
- /**
- * \brief Get the O flag.
- * \return O flag
- */
- bool GetFlagO () const;
+ /**
+ * \brief Get the O flag.
+ * \return O flag
+ */
+ bool GetFlagO () const;
- /**
- * \brief Set the O flag.
- * \param o value
- */
- void SetFlagO (bool o);
+ /**
+ * \brief Set the O flag.
+ * \param o value
+ */
+ void SetFlagO (bool o);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The R flag.
- */
- bool m_flagR;
+private:
+ /**
+ * \brief The R flag.
+ */
+ bool m_flagR;
- /**
- * \brief The O flag.
- */
- bool m_flagS;
+ /**
+ * \brief The O flag.
+ */
+ bool m_flagS;
- /**
- * \brief The M flag.
- */
- bool m_flagO;
+ /**
+ * \brief The M flag.
+ */
+ bool m_flagO;
- /**
- * \brief The reserved value.
- */
- uint32_t m_reserved;
+ /**
+ * \brief The reserved value.
+ */
+ uint32_t m_reserved;
- /**
- * \brief The IPv6 target address.
- */
- Ipv6Address m_target;
+ /**
+ * \brief The IPv6 target address.
+ */
+ Ipv6Address m_target;
};
/**
@@ -568,190 +568,190 @@
*/
class Icmpv6RA : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6RA ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6RA ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6RA ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6RA ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Set the IPv6 maximum number of jumps.
- * \param m maximum jumps
- */
- void SetCurHopLimit (uint8_t m);
+ /**
+ * \brief Set the IPv6 maximum number of jumps.
+ * \param m maximum jumps
+ */
+ void SetCurHopLimit (uint8_t m);
- /**
- * \brief Get the IPv6 maximum number of jumps.
- * \return maximum jumps
- */
- uint8_t GetCurHopLimit () const;
+ /**
+ * \brief Get the IPv6 maximum number of jumps.
+ * \return maximum jumps
+ */
+ uint8_t GetCurHopLimit () const;
- /**
- * \brief Set the node Life time (Neighbor Discovery).
- * \param l life time
- */
- void SetLifeTime (uint16_t l);
+ /**
+ * \brief Set the node Life time (Neighbor Discovery).
+ * \param l life time
+ */
+ void SetLifeTime (uint16_t l);
- /**
- * \brief Get the node Life time (Neighbor Discovery).
- * \return life time
- */
- uint16_t GetLifeTime () const;
+ /**
+ * \brief Get the node Life time (Neighbor Discovery).
+ * \return life time
+ */
+ uint16_t GetLifeTime () const;
- /**
- * \brief Set the node Reachable time (Neighbor Discovery).
- * \param r Reachable time
- */
- void SetReachableTime (uint32_t r);
+ /**
+ * \brief Set the node Reachable time (Neighbor Discovery).
+ * \param r Reachable time
+ */
+ void SetReachableTime (uint32_t r);
- /**
- * \brief Get the node Reachable time (Neighbor Discovery).
- * \return reachable time
- */
- uint32_t GetReachableTime () const;
+ /**
+ * \brief Get the node Reachable time (Neighbor Discovery).
+ * \return reachable time
+ */
+ uint32_t GetReachableTime () const;
- /**
- * \brief Set the node Retransmission time (Neighbor Discovery).
- * \param r Retransmission time
- */
- void SetRetransmissionTime (uint32_t r);
+ /**
+ * \brief Set the node Retransmission time (Neighbor Discovery).
+ * \param r Retransmission time
+ */
+ void SetRetransmissionTime (uint32_t r);
- /**
- * \brief Get the node Retransmission time (Neighbor Discovery).
- * \return retransmission time
- */
- uint32_t GetRetransmissionTime () const;
+ /**
+ * \brief Get the node Retransmission time (Neighbor Discovery).
+ * \return retransmission time
+ */
+ uint32_t GetRetransmissionTime () const;
- /**
- * \brief Get the M flag.
- * \return M flag
- */
- bool GetFlagM () const;
+ /**
+ * \brief Get the M flag.
+ * \return M flag
+ */
+ bool GetFlagM () const;
- /**
- * \brief Set the M flag.
- * \param m value
- */
- void SetFlagM (bool m);
+ /**
+ * \brief Set the M flag.
+ * \param m value
+ */
+ void SetFlagM (bool m);
- /**
- * \brief Get the O flag.
- * \return O flag
- */
- bool GetFlagO () const;
+ /**
+ * \brief Get the O flag.
+ * \return O flag
+ */
+ bool GetFlagO () const;
- /**
- * \brief Set the O flag.
- * \param o value
- */
- void SetFlagO (bool o);
+ /**
+ * \brief Set the O flag.
+ * \param o value
+ */
+ void SetFlagO (bool o);
- /**
- * \brief Get the H flag.
- * \return H flag
- */
- bool GetFlagH () const;
+ /**
+ * \brief Get the H flag.
+ * \return H flag
+ */
+ bool GetFlagH () const;
- /**
- * \brief Set the H flag.
- * \param h value
- */
- void SetFlagH (bool h);
+ /**
+ * \brief Set the H flag.
+ * \param h value
+ */
+ void SetFlagH (bool h);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Getflags.
- * \return the flags value
- */
- uint8_t GetFlags () const;
+ /**
+ * \brief Getflags.
+ * \return the flags value
+ */
+ uint8_t GetFlags () const;
- /**
- * \brief Setflags.
- * \param f the flags value
- */
- void SetFlags (uint8_t f);
+ /**
+ * \brief Setflags.
+ * \param f the flags value
+ */
+ void SetFlags (uint8_t f);
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The M flag.
- */
- bool m_flagM;
+private:
+ /**
+ * \brief The M flag.
+ */
+ bool m_flagM;
- /**
- * \brief The O flag.
- */
- bool m_flagO;
+ /**
+ * \brief The O flag.
+ */
+ bool m_flagO;
- /**
- * \brief The H flag.
- */
- bool m_flagH;
+ /**
+ * \brief The H flag.
+ */
+ bool m_flagH;
- /**
- * \brief The flags field value.
- */
- uint8_t m_flags;
+ /**
+ * \brief The flags field value.
+ */
+ uint8_t m_flags;
- /**
- * \brief The lifetime value.
- */
- uint16_t m_LifeTime;
+ /**
+ * \brief The lifetime value.
+ */
+ uint16_t m_LifeTime;
- /**
- * \brief The reachable time value.
- */
- uint32_t m_ReachableTime;
+ /**
+ * \brief The reachable time value.
+ */
+ uint32_t m_ReachableTime;
- /**
- * \brief The retransmission timer.
- */
- uint32_t m_RetransmissionTimer;
+ /**
+ * \brief The retransmission timer.
+ */
+ uint32_t m_RetransmissionTimer;
- /**
- * \brief The max jumps.
- */
- uint8_t m_curHopLimit;
+ /**
+ * \brief The max jumps.
+ */
+ uint8_t m_curHopLimit;
};
/**
@@ -760,71 +760,71 @@
*/
class Icmpv6RS : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6RS ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6RS ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6RS ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6RS ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the reserved field.
- * \return reserved value
- */
- uint32_t GetReserved () const;
+ /**
+ * \brief Get the reserved field.
+ * \return reserved value
+ */
+ uint32_t GetReserved () const;
- /**
- * \brief Set the reserved field.
- * \param reserved the reserved value
- */
- void SetReserved (uint32_t reserved);
+ /**
+ * \brief Set the reserved field.
+ * \param reserved the reserved value
+ */
+ void SetReserved (uint32_t reserved);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The reserved value.
- */
- uint32_t m_reserved;
+private:
+ /**
+ * \brief The reserved value.
+ */
+ uint32_t m_reserved;
};
/**
@@ -833,105 +833,105 @@
*/
class Icmpv6Redirection : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6Redirection ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6Redirection ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6Redirection ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6Redirection ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the IPv6 target address.
- * \return the IPv6 target address
- */
- Ipv6Address GetTarget () const;
+ /**
+ * \brief Get the IPv6 target address.
+ * \return the IPv6 target address
+ */
+ Ipv6Address GetTarget () const;
- /**
- * \brief Set the IPv6 target address.
- * \param target IPv6 target address
- */
- void SetTarget (Ipv6Address target);
+ /**
+ * \brief Set the IPv6 target address.
+ * \param target IPv6 target address
+ */
+ void SetTarget (Ipv6Address target);
- /**
- * \brief Get the IPv6 destination address.
- * \return the IPv6 destination address
- */
- Ipv6Address GetDestination () const;
+ /**
+ * \brief Get the IPv6 destination address.
+ * \return the IPv6 destination address
+ */
+ Ipv6Address GetDestination () const;
- /**
- * \brief Set the IPv6 destination address.
- * \param destination IPv6 destination address
- */
- void SetDestination (Ipv6Address destination);
+ /**
+ * \brief Set the IPv6 destination address.
+ * \param destination IPv6 destination address
+ */
+ void SetDestination (Ipv6Address destination);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- /**
- * \brief Get the reserved field.
- * \return reserved value
- */
- uint32_t GetReserved () const;
+ /**
+ * \brief Get the reserved field.
+ * \return reserved value
+ */
+ uint32_t GetReserved () const;
- /**
- * \brief Set the reserved field.
- * \param reserved the reserved value
- */
- void SetReserved (uint32_t reserved);
+ /**
+ * \brief Set the reserved field.
+ * \param reserved the reserved value
+ */
+ void SetReserved (uint32_t reserved);
- private:
- /**
- * \brief IPv6 target address.
- */
- Ipv6Address m_target;
+private:
+ /**
+ * \brief IPv6 target address.
+ */
+ Ipv6Address m_target;
- /**
- * \brief IPv6 destination address.
- */
- Ipv6Address m_destination;
+ /**
+ * \brief IPv6 destination address.
+ */
+ Ipv6Address m_destination;
- /**
- * \brief Reserved value.
- */
- uint32_t m_reserved;
+ /**
+ * \brief Reserved value.
+ */
+ uint32_t m_reserved;
};
/**
@@ -940,94 +940,94 @@
*/
class Icmpv6Echo : public Icmpv6Header
{
- public:
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Default constructor.
- */
- Icmpv6Echo ();
+ /**
+ * \brief Default constructor.
+ */
+ Icmpv6Echo ();
- /**
- * \brief Constructor.
- * \param request request or reply message
- */
- Icmpv6Echo (bool request);
+ /**
+ * \brief Constructor.
+ * \param request request or reply message
+ */
+ Icmpv6Echo (bool request);
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6Echo ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6Echo ();
- /**
- * \brief Get the ID of the packet.
- * \return id
- */
- uint16_t GetId () const;
+ /**
+ * \brief Get the ID of the packet.
+ * \return id
+ */
+ uint16_t GetId () const;
- /**
- * \brief Set the ID of the packet.
- * \param id id to set
- */
- void SetId (uint16_t id);
+ /**
+ * \brief Set the ID of the packet.
+ * \param id id to set
+ */
+ void SetId (uint16_t id);
- /**
- * \brief Get the sequence number.
- * \return sequence number
- */
- uint16_t GetSeq () const;
+ /**
+ * \brief Get the sequence number.
+ * \return sequence number
+ */
+ uint16_t GetSeq () const;
- /**
- * \brief Set the sequence number.
- * \param seq sequence to set
- */
- void SetSeq (uint16_t seq);
+ /**
+ * \brief Set the sequence number.
+ * \param seq sequence to set
+ */
+ void SetSeq (uint16_t seq);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief ID of the packet (to distinguish response between many ping program).
- */
- uint16_t m_id;
+private:
+ /**
+ * \brief ID of the packet (to distinguish response between many ping program).
+ */
+ uint16_t m_id;
- /**
- * \brief Sequence number (to distinguish response).
- */
- uint16_t m_seq;
+ /**
+ * \brief Sequence number (to distinguish response).
+ */
+ uint16_t m_seq;
};
/**
@@ -1036,71 +1036,71 @@
*/
class Icmpv6DestinationUnreachable : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6DestinationUnreachable ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6DestinationUnreachable ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6DestinationUnreachable ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6DestinationUnreachable ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the incorrect packet.
- * \return the incorrect packet
- */
- Ptr<Packet> GetPacket () const;
+ /**
+ * \brief Get the incorrect packet.
+ * \return the incorrect packet
+ */
+ Ptr<Packet> GetPacket () const;
- /**
- * \brief Set the incorrect packet.
- * \param p the incorrect packet
- */
- void SetPacket (Ptr<Packet> p);
+ /**
+ * \brief Set the incorrect packet.
+ * \param p the incorrect packet
+ */
+ void SetPacket (Ptr<Packet> p);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The incorrect Packet.
- */
- Ptr<Packet> m_packet;
+private:
+ /**
+ * \brief The incorrect Packet.
+ */
+ Ptr<Packet> m_packet;
};
/**
@@ -1109,89 +1109,89 @@
*/
class Icmpv6TooBig : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6TooBig ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6TooBig ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6TooBig ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6TooBig ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the incorrect packet.
- * \return the incorrect packet
- */
- Ptr<Packet> GetPacket () const;
+ /**
+ * \brief Get the incorrect packet.
+ * \return the incorrect packet
+ */
+ Ptr<Packet> GetPacket () const;
- /**
- * \brief Set the incorrect packet.
- * \param p the incorrect packet
- */
- void SetPacket (Ptr<Packet> p);
+ /**
+ * \brief Set the incorrect packet.
+ * \param p the incorrect packet
+ */
+ void SetPacket (Ptr<Packet> p);
- /**
- * \brief Get the MTU field.
- * \return MTU value
- */
- uint32_t GetMtu () const;
+ /**
+ * \brief Get the MTU field.
+ * \return MTU value
+ */
+ uint32_t GetMtu () const;
- /**
- * \brief Set the MTU.
- * \param mtu the MTU
- */
- void SetMtu (uint32_t mtu);
+ /**
+ * \brief Set the MTU.
+ * \param mtu the MTU
+ */
+ void SetMtu (uint32_t mtu);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
+private:
- /**
- * \brief the incorrect packet.
- */
- Ptr<Packet> m_packet;
+ /**
+ * \brief the incorrect packet.
+ */
+ Ptr<Packet> m_packet;
- /**
- * \brief The MTU value.
- */
- uint32_t m_mtu;
+ /**
+ * \brief The MTU value.
+ */
+ uint32_t m_mtu;
};
/**
@@ -1200,72 +1200,72 @@
*/
class Icmpv6TimeExceeded : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6TimeExceeded ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6TimeExceeded ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6TimeExceeded ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6TimeExceeded ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the incorrect packet.
- * \return the incorrect packet
- */
- Ptr<Packet> GetPacket () const;
+ /**
+ * \brief Get the incorrect packet.
+ * \return the incorrect packet
+ */
+ Ptr<Packet> GetPacket () const;
- /**
- * \brief Set the incorrect packet.
- * \param p the incorrect packet
- */
- void SetPacket (Ptr<Packet> p);
+ /**
+ * \brief Set the incorrect packet.
+ * \param p the incorrect packet
+ */
+ void SetPacket (Ptr<Packet> p);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
+private:
- /**
- * \brief The incorrect packet.
- */
- Ptr<Packet> m_packet;
+ /**
+ * \brief The incorrect packet.
+ */
+ Ptr<Packet> m_packet;
};
/**
@@ -1274,89 +1274,89 @@
*/
class Icmpv6ParameterError : public Icmpv6Header
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6ParameterError ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6ParameterError ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6ParameterError ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6ParameterError ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the incorrect packet.
- * \return the incorrect packet
- */
- Ptr<Packet> GetPacket () const;
+ /**
+ * \brief Get the incorrect packet.
+ * \return the incorrect packet
+ */
+ Ptr<Packet> GetPacket () const;
- /**
- * \brief Set the incorrect packet.
- * \param p the incorrect packet
- */
- void SetPacket (Ptr<Packet> p);
+ /**
+ * \brief Set the incorrect packet.
+ * \param p the incorrect packet
+ */
+ void SetPacket (Ptr<Packet> p);
- /**
- * \brief Get the pointer field.
- * \return pointer value
- */
- uint32_t GetPtr () const;
+ /**
+ * \brief Get the pointer field.
+ * \return pointer value
+ */
+ uint32_t GetPtr () const;
- /**
- * \brief Set the pointer field.
- * \param ptr byte where the error is located in the incorrect packet
- */
- void SetPtr (uint32_t ptr);
+ /**
+ * \brief Set the pointer field.
+ * \param ptr byte where the error is located in the incorrect packet
+ */
+ void SetPtr (uint32_t ptr);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
+private:
- /**
- * \brief The incorrect packet.
- */
- Ptr<Packet> m_packet;
+ /**
+ * \brief The incorrect packet.
+ */
+ Ptr<Packet> m_packet;
- /**
- * \brief The pointer field.
- */
- uint32_t m_ptr;
+ /**
+ * \brief The pointer field.
+ */
+ uint32_t m_ptr;
};
/**
@@ -1365,94 +1365,94 @@
*/
class Icmpv6OptionMtu : public Icmpv6OptionHeader
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6OptionMtu ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6OptionMtu ();
- /**
- * \brief Constructor.
- * \param mtu MTU used.
- */
- Icmpv6OptionMtu (uint32_t mtu);
+ /**
+ * \brief Constructor.
+ * \param mtu MTU used.
+ */
+ Icmpv6OptionMtu (uint32_t mtu);
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6OptionMtu ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6OptionMtu ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the reserved field.
- * \return the reserved value
- */
- uint16_t GetReserved () const;
+ /**
+ * \brief Get the reserved field.
+ * \return the reserved value
+ */
+ uint16_t GetReserved () const;
- /**
- * \brief Set the reserved field.
- * \param reserved the reserved value
- */
- void SetReserved (uint16_t reserved);
+ /**
+ * \brief Set the reserved field.
+ * \param reserved the reserved value
+ */
+ void SetReserved (uint16_t reserved);
- /**
- * \brief Get the MTU.
- * \return the MTU value
- */
- uint32_t GetMtu () const;
+ /**
+ * \brief Get the MTU.
+ * \return the MTU value
+ */
+ uint32_t GetMtu () const;
- /**
- * \brief Set the MTU.
- * \param mtu the MTU to set
- */
- void SetMtu (uint32_t mtu);
+ /**
+ * \brief Set the MTU.
+ * \param mtu the MTU to set
+ */
+ void SetMtu (uint32_t mtu);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The reserved value
- */
- uint16_t m_reserved;
+private:
+ /**
+ * \brief The reserved value
+ */
+ uint16_t m_reserved;
- /**
- * \brief The MTU value.
- */
- uint32_t m_mtu;
+ /**
+ * \brief The MTU value.
+ */
+ uint32_t m_mtu;
};
/**
@@ -1461,163 +1461,163 @@
*/
class Icmpv6OptionPrefixInformation : public Icmpv6OptionHeader
{
- public:
- /**
- * \brief Constructor.
- */
- Icmpv6OptionPrefixInformation ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6OptionPrefixInformation ();
- /**
- * \brief Constructor.
- * \param network prefix
- * \param prefixlen prefix length
- */
- Icmpv6OptionPrefixInformation (Ipv6Address network, uint8_t prefixlen);
+ /**
+ * \brief Constructor.
+ * \param network prefix
+ * \param prefixlen prefix length
+ */
+ Icmpv6OptionPrefixInformation (Ipv6Address network, uint8_t prefixlen);
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6OptionPrefixInformation ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6OptionPrefixInformation ();
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Get the prefix length.
- * \return prefix length
- */
- uint8_t GetPrefixLength () const;
+ /**
+ * \brief Get the prefix length.
+ * \return prefix length
+ */
+ uint8_t GetPrefixLength () const;
- /**
- * \brief Set the prefix length.
- * \param prefixLength the prefix length
- */
- void SetPrefixLength (uint8_t prefixLength);
+ /**
+ * \brief Set the prefix length.
+ * \param prefixLength the prefix length
+ */
+ void SetPrefixLength (uint8_t prefixLength);
- /**
- * \brief Get the flags.
- * \return the flags.
- */
- uint8_t GetFlags () const;
+ /**
+ * \brief Get the flags.
+ * \return the flags.
+ */
+ uint8_t GetFlags () const;
- /**
- * \brief Set the flags.
- * \param flags the flags to set
- */
- void SetFlags (uint8_t flags);
+ /**
+ * \brief Set the flags.
+ * \param flags the flags to set
+ */
+ void SetFlags (uint8_t flags);
- /**
- * \brief Get the valid time of the information.
- * \return valid time
- */
- uint32_t GetValidTime () const;
+ /**
+ * \brief Get the valid time of the information.
+ * \return valid time
+ */
+ uint32_t GetValidTime () const;
- /**
- * \brief Set the valid time of the information.
- * \param validTime valid time
- */
- void SetValidTime (uint32_t validTime);
+ /**
+ * \brief Set the valid time of the information.
+ * \param validTime valid time
+ */
+ void SetValidTime (uint32_t validTime);
- /**
- * \brief Get the preferred time of the information.
- * \return preferred time
- */
- uint32_t GetPreferredTime () const;
+ /**
+ * \brief Get the preferred time of the information.
+ * \return preferred time
+ */
+ uint32_t GetPreferredTime () const;
- /**
- * \brief Set the preferred time of the information.
- * \param preferredTime preferred time
- */
- void SetPreferredTime (uint32_t preferredTime);
+ /**
+ * \brief Set the preferred time of the information.
+ * \param preferredTime preferred time
+ */
+ void SetPreferredTime (uint32_t preferredTime);
- /**
- * \brief Get the reserved field.
- * \return the reserved field (should be 0x00000000)
- */
- uint32_t GetReserved () const;
+ /**
+ * \brief Get the reserved field.
+ * \return the reserved field (should be 0x00000000)
+ */
+ uint32_t GetReserved () const;
- /**
- * \brief Set the reserved field (normally it will be 0x00000000).
- * \param reserved reserved value
- */
- void SetReserved (uint32_t reserved);
+ /**
+ * \brief Set the reserved field (normally it will be 0x00000000).
+ * \param reserved reserved value
+ */
+ void SetReserved (uint32_t reserved);
- /**
- * \brief Get the IPv6 prefix.
- * \return IPv6 prefix
- */
- Ipv6Address GetPrefix () const;
+ /**
+ * \brief Get the IPv6 prefix.
+ * \return IPv6 prefix
+ */
+ Ipv6Address GetPrefix () const;
- /**
- * \brief Set the IPv6 prefix.
- * \param prefix the IPv6 prefix
- */
- void SetPrefix (Ipv6Address prefix);
+ /**
+ * \brief Set the IPv6 prefix.
+ * \param prefix the IPv6 prefix
+ */
+ void SetPrefix (Ipv6Address prefix);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The prefix value.
- */
- Ipv6Address m_prefix;
+private:
+ /**
+ * \brief The prefix value.
+ */
+ Ipv6Address m_prefix;
- /**
- * \brief The length of the prefix.
- */
- uint8_t m_prefixLength;
+ /**
+ * \brief The length of the prefix.
+ */
+ uint8_t m_prefixLength;
- /**
- * \brief The flags.
- */
- uint8_t m_flags;
+ /**
+ * \brief The flags.
+ */
+ uint8_t m_flags;
- /**
- * \brief The valid time.
- */
- uint32_t m_validTime;
+ /**
+ * \brief The valid time.
+ */
+ uint32_t m_validTime;
- /**
- * \brief The preferred time.
- */
- uint32_t m_preferredTime;
+ /**
+ * \brief The preferred time.
+ */
+ uint32_t m_preferredTime;
- /**
- * \brief The reserved field.
- */
- uint32_t m_reserved;
+ /**
+ * \brief The reserved field.
+ */
+ uint32_t m_reserved;
};
/**
@@ -1626,84 +1626,84 @@
*/
class Icmpv6OptionLinkLayerAddress : public Icmpv6OptionHeader
{
- public:
- /**
- * \brief Constructor.
- * \param source source hardware address or target hardware address for the option
- */
- Icmpv6OptionLinkLayerAddress (bool source);
+public:
+ /**
+ * \brief Constructor.
+ * \param source source hardware address or target hardware address for the option
+ */
+ Icmpv6OptionLinkLayerAddress (bool source);
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId (void) const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId (void) const;
- /**
- * \brief Constructor.
- * \param source source hardware address or target hardware address for the option
- * \param addr hardware address
- */
- Icmpv6OptionLinkLayerAddress (bool source, Address addr);
+ /**
+ * \brief Constructor.
+ * \param source source hardware address or target hardware address for the option
+ * \param addr hardware address
+ */
+ Icmpv6OptionLinkLayerAddress (bool source, Address addr);
- /**
- * \brief Constructor.
- */
- Icmpv6OptionLinkLayerAddress ();
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6OptionLinkLayerAddress ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6OptionLinkLayerAddress ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6OptionLinkLayerAddress ();
- /**
- * \brief Get the hardware address.
- * \return the hardware address
- */
- Address GetAddress () const;
+ /**
+ * \brief Get the hardware address.
+ * \return the hardware address
+ */
+ Address GetAddress () const;
- /**
- * \brief Set the hardware address.
- * \param addr the address to set
- */
- void SetAddress (Address addr);
+ /**
+ * \brief Set the hardware address.
+ * \param addr the address to set
+ */
+ void SetAddress (Address addr);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The hardware address.
- */
- Address m_addr;
+private:
+ /**
+ * \brief The hardware address.
+ */
+ Address m_addr;
};
/**
@@ -1712,71 +1712,71 @@
*/
class Icmpv6OptionRedirected : public Icmpv6OptionHeader
{
- public:
- /**
- * \brief Get the UID of this class.
- * \return UID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the UID of this class.
+ * \return UID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Icmpv6OptionRedirected ();
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6OptionRedirected ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6OptionRedirected ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6OptionRedirected ();
- /**
- * \brief Get the redirected packet.
- * \return the redirected packet
- */
- Ptr<Packet> GetPacket () const;
+ /**
+ * \brief Get the redirected packet.
+ * \return the redirected packet
+ */
+ Ptr<Packet> GetPacket () const;
- /**
- * \brief Set the redirected packet.
- * \param packet the redirected packet
- */
- void SetPacket (Ptr<Packet> packet);
+ /**
+ * \brief Set the redirected packet.
+ * \param packet the redirected packet
+ */
+ void SetPacket (Ptr<Packet> packet);
- /**
- * \brief Print informations.
- * \param os output stream
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print informations.
+ * \param os output stream
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size.
- * \return serialized size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size.
+ * \return serialized size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start start offset
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start start offset
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start start offset
- * \return length of packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start start offset
+ * \return length of packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The redirected packet.
- */
- Ptr<Packet> m_packet;
+private:
+ /**
+ * \brief The redirected packet.
+ */
+ Ptr<Packet> m_packet;
};
} /* namespace ns3 */
--- a/src/internet-stack/icmpv6-l4-protocol.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/icmpv6-l4-protocol.cc Wed Dec 30 14:22:25 2009 +0100
@@ -91,11 +91,11 @@
{
NS_LOG_FUNCTION_NOARGS ();
for (CacheList::const_iterator it = m_cacheList.begin () ; it != m_cacheList.end () ; it++)
- {
- Ptr<NdiscCache> cache = *it;
- cache->Dispose ();
- cache = 0;
- }
+ {
+ Ptr<NdiscCache> cache = *it;
+ cache->Dispose ();
+ cache = 0;
+ }
m_cacheList.clear ();
m_node = 0;
@@ -106,20 +106,20 @@
{
NS_LOG_FUNCTION_NOARGS ();
if (m_node == 0)
- {
- Ptr<Node> node = this->GetObject<Node> ();
- if (node != 0)
{
- Ptr<Ipv6L3Protocol> ipv6 = this->GetObject<Ipv6L3Protocol> ();
- if (ipv6 != 0)
- {
- this->SetNode (node);
- ipv6->Insert (this);
- Ptr<Ipv6RawSocketFactoryImpl> rawFactory = CreateObject<Ipv6RawSocketFactoryImpl> ();
- ipv6->AggregateObject (rawFactory);
- }
+ Ptr<Node> node = this->GetObject<Node> ();
+ if (node != 0)
+ {
+ Ptr<Ipv6L3Protocol> ipv6 = this->GetObject<Ipv6L3Protocol> ();
+ if (ipv6 != 0)
+ {
+ this->SetNode (node);
+ ipv6->Insert (this);
+ Ptr<Ipv6RawSocketFactoryImpl> rawFactory = CreateObject<Ipv6RawSocketFactoryImpl> ();
+ ipv6->AggregateObject (rawFactory);
+ }
+ }
}
- }
Object::NotifyNewAggregate ();
}
@@ -161,9 +161,9 @@
NS_ASSERT (ipv6);
if(!m_alwaysDad)
- {
- return;
- }
+ {
+ return;
+ }
/* TODO : disable multicast loopback to prevent NS probing to be received by the sender */
@@ -181,18 +181,18 @@
Ptr<Ipv6> ipv6 = m_node->GetObject<Ipv6> ();
switch (*p->PeekData ()) /* very ugly! try to find something better in the future */
- {
+ {
case Icmpv6Header::ICMPV6_ND_ROUTER_SOLICITATION:
if (ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->GetDevice ())))
- {
- HandleRS (p, src, dst, interface);
- }
+ {
+ HandleRS (p, src, dst, interface);
+ }
break;
case Icmpv6Header::ICMPV6_ND_ROUTER_ADVERTISEMENT:
if (!ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->GetDevice ())))
- {
- HandleRA (p, src, dst, interface);
- }
+ {
+ HandleRA (p, src, dst, interface);
+ }
break;
case Icmpv6Header::ICMPV6_ND_NEIGHBOR_SOLICITATION:
HandleNS (p, src, dst, interface);
@@ -219,7 +219,7 @@
default:
NS_LOG_LOGIC ("Unknown ICMPv6 message type=" << (uint8_t)*p->PeekData ());
break;
- }
+ }
return Ipv6L4Protocol::RX_OK;
}
@@ -256,40 +256,40 @@
p->RemoveHeader (raHeader);
while (next == true)
- {
- type = *p->PeekData ();
+ {
+ type = *p->PeekData ();
- switch (type)
- {
- case Icmpv6Header::ICMPV6_OPT_PREFIX:
- p->RemoveHeader (prefixHdr);
- ipv6->AddAutoconfiguredAddress (ipv6->GetInterfaceForDevice (interface->GetDevice ()), prefixHdr.GetPrefix (), prefixHdr.GetPrefixLength (),
- prefixHdr.GetFlags (), prefixHdr.GetValidTime (), prefixHdr.GetPreferredTime (), src);
- break;
- case Icmpv6Header::ICMPV6_OPT_MTU:
- /* take in account the first MTU option */
- if (!hasMtu)
+ switch (type)
{
- p->RemoveHeader (mtuHdr);
- hasMtu = true;
- /* XXX case of multiple prefix on single interface */
- /* interface->GetDevice ()->SetMtu (m.GetMtu ()); */
+ case Icmpv6Header::ICMPV6_OPT_PREFIX:
+ p->RemoveHeader (prefixHdr);
+ ipv6->AddAutoconfiguredAddress (ipv6->GetInterfaceForDevice (interface->GetDevice ()), prefixHdr.GetPrefix (), prefixHdr.GetPrefixLength (),
+ prefixHdr.GetFlags (), prefixHdr.GetValidTime (), prefixHdr.GetPreferredTime (), src);
+ break;
+ case Icmpv6Header::ICMPV6_OPT_MTU:
+ /* take in account the first MTU option */
+ if (!hasMtu)
+ {
+ p->RemoveHeader (mtuHdr);
+ hasMtu = true;
+ /* XXX case of multiple prefix on single interface */
+ /* interface->GetDevice ()->SetMtu (m.GetMtu ()); */
+ }
+ break;
+ case Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE:
+ /* take in account the first LLA option */
+ if (!hasLla)
+ {
+ p->RemoveHeader (llaHdr);
+ ReceiveLLA (llaHdr, src, dst, interface);
+ hasLla = true;
+ }
+ break;
+ default:
+ /* unknow option, quit */
+ next = false;
}
- break;
- case Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE:
- /* take in account the first LLA option */
- if (!hasLla)
- {
- p->RemoveHeader (llaHdr);
- ReceiveLLA (llaHdr, src, dst, interface);
- hasLla = true;
- }
- break;
- default:
- /* unknow option, quit */
- next = false;
}
- }
}
void Icmpv6L4Protocol::ReceiveLLA (Icmpv6OptionLinkLayerAddress lla, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface)
@@ -298,63 +298,63 @@
Address hardwareAddress;
NdiscCache::Entry* entry = 0;
Ptr<NdiscCache> cache = FindCache (interface->GetDevice ());
-
+
/* check if we have this address in our cache */
entry = cache->Lookup (src);
if (!entry)
- {
- entry = cache->Add (src);
- entry->SetRouter (true);
- entry->SetMacAddress (lla.GetAddress ());
- entry->MarkReachable ();
- entry->StartReachableTimer ();
- }
+ {
+ entry = cache->Add (src);
+ entry->SetRouter (true);
+ entry->SetMacAddress (lla.GetAddress ());
+ entry->MarkReachable ();
+ entry->StartReachableTimer ();
+ }
else
- {
- std::list<Ptr<Packet> > waiting;
- if (entry->IsIncomplete ())
{
- entry->StopRetransmitTimer ();
- // mark it to reachable
- waiting = entry->MarkReachable (lla.GetAddress ());
- entry->StopReachableTimer ();
- entry->StartReachableTimer ();
- // send out waiting packet
- for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
- {
- cache->GetInterface ()->Send (*it, src);
- }
- entry->ClearWaitingPacket ();
- }
- else
- {
- if (entry->GetMacAddress ()!=lla.GetAddress ())
- {
- entry->SetMacAddress (lla.GetAddress ());
- entry->MarkStale ();
- entry->SetRouter (true);
- }
- else
- {
- if (!entry->IsReachable ())
+ std::list<Ptr<Packet> > waiting;
+ if (entry->IsIncomplete ())
{
- entry->StopProbeTimer ();
- entry->StopDelayTimer ();
+ entry->StopRetransmitTimer ();
+ // mark it to reachable
waiting = entry->MarkReachable (lla.GetAddress ());
- if (entry->IsProbe ())
- {
- for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+ entry->StopReachableTimer ();
+ entry->StartReachableTimer ();
+ // send out waiting packet
+ for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
{
cache->GetInterface ()->Send (*it, src);
}
- }
- entry->StopReachableTimer ();
- entry->StartReachableTimer ();
- }
- }
+ entry->ClearWaitingPacket ();
+ }
+ else
+ {
+ if (entry->GetMacAddress ()!=lla.GetAddress ())
+ {
+ entry->SetMacAddress (lla.GetAddress ());
+ entry->MarkStale ();
+ entry->SetRouter (true);
+ }
+ else
+ {
+ if (!entry->IsReachable ())
+ {
+ entry->StopProbeTimer ();
+ entry->StopDelayTimer ();
+ waiting = entry->MarkReachable (lla.GetAddress ());
+ if (entry->IsProbe ())
+ {
+ for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+ {
+ cache->GetInterface ()->Send (*it, src);
+ }
+ }
+ entry->StopReachableTimer ();
+ entry->StartReachableTimer ();
+ }
+ }
+ }
}
- }
}
void Icmpv6L4Protocol::HandleRS (Ptr<Packet> packet, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface)
@@ -369,28 +369,28 @@
Ptr<NdiscCache> cache = FindCache (interface->GetDevice ());
if (src != Ipv6Address::GetAny ())
- {
- /* XXX search all options following the RS header */
- /* test if the next option is SourceLinkLayerAddress */
- if (*packet->PeekData () != Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE)
{
- return;
- }
- packet->RemoveHeader (lla);
- NS_LOG_LOGIC ("Cache updated by RS");
+ /* XXX search all options following the RS header */
+ /* test if the next option is SourceLinkLayerAddress */
+ if (*packet->PeekData () != Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE)
+ {
+ return;
+ }
+ packet->RemoveHeader (lla);
+ NS_LOG_LOGIC ("Cache updated by RS");
- entry = cache->Lookup (src);
- if (!entry)
- {
- entry = cache->Add (src);
- entry->SetRouter (false);
- entry->MarkStale (lla.GetAddress ());
+ entry = cache->Lookup (src);
+ if (!entry)
+ {
+ entry = cache->Add (src);
+ entry->SetRouter (false);
+ entry->MarkStale (lla.GetAddress ());
+ }
+ else if (entry->GetMacAddress () != lla.GetAddress ())
+ {
+ entry->MarkStale (lla.GetAddress ());
+ }
}
- else if (entry->GetMacAddress () != lla.GetAddress ())
- {
- entry->MarkStale (lla.GetAddress ());
- }
- }
}
void Icmpv6L4Protocol::HandleNS (Ptr<Packet> packet, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface)
@@ -407,28 +407,28 @@
Ipv6Address target = nsHeader.GetIpv6Target ();
for (i = 0 ; i < nb ; i++)
- {
- ifaddr = interface->GetAddress (i);
+ {
+ ifaddr = interface->GetAddress (i);
- if (ifaddr.GetAddress () == target)
- {
- found = true;
- break;
+ if (ifaddr.GetAddress () == target)
+ {
+ found = true;
+ break;
+ }
}
- }
if (!found)
- {
- NS_LOG_LOGIC ("Not a NS for us");
- return;
- }
+ {
+ NS_LOG_LOGIC ("Not a NS for us");
+ return;
+ }
if (packet->GetUid () == ifaddr.GetNsDadUid ())
- {
- /* don't process our own DAD probe */
- NS_LOG_LOGIC ("Hey we receive our DAD probe!");
- return;
- }
+ {
+ /* don't process our own DAD probe */
+ NS_LOG_LOGIC ("Hey we receive our DAD probe!");
+ return;
+ }
Icmpv6OptionLinkLayerAddress lla (1);
Address hardwareAddress;
@@ -439,42 +439,42 @@
/* XXX search all options following the NS header */
if (src != Ipv6Address::GetAny ())
- {
- if (*packet->PeekData () != Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE)
- {
- return;
- }
-
- /* Get LLA */
- packet->RemoveHeader (lla);
-
- entry = cache->Lookup (src);
- if (!entry)
{
- entry = cache->Add (src);
- entry->SetRouter (false);
- entry->MarkStale (lla.GetAddress ());
- }
- else if (entry->GetMacAddress () != lla.GetAddress ())
- {
- entry->MarkStale (lla.GetAddress ());
+ if (*packet->PeekData () != Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE)
+ {
+ return;
+ }
+
+ /* Get LLA */
+ packet->RemoveHeader (lla);
+
+ entry = cache->Lookup (src);
+ if (!entry)
+ {
+ entry = cache->Add (src);
+ entry->SetRouter (false);
+ entry->MarkStale (lla.GetAddress ());
+ }
+ else if (entry->GetMacAddress () != lla.GetAddress ())
+ {
+ entry->MarkStale (lla.GetAddress ());
+ }
+
+ flags = 3; /* S + O flags */
}
-
- flags = 3; /* S + O flags */
- }
else
- {
- /* it means someone do a DAD */
- flags = 1; /* O flag */
- }
+ {
+ /* it means someone do a DAD */
+ flags = 1; /* O flag */
+ }
/* send a NA to src */
Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
if (ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->GetDevice ())))
- {
- flags += 4; /* R flag */
- }
+ {
+ flags += 4; /* R flag */
+ }
hardwareAddress = interface->GetDevice ()->GetAddress ();
Ptr<Packet> p = ForgeNA (target.IsLinkLocal () ? interface->GetLinkLocalAddress ().GetAddress () : ifaddr.GetAddress (), src.IsAny () ? Ipv6Address::GetAllNodesMulticast () : src, &hardwareAddress, flags );
@@ -541,119 +541,119 @@
entry = cache->Lookup (target);
if (!entry)
- {
- /* ouch!! we are victim of a DAD */
- Ipv6InterfaceAddress ifaddr;
- bool found = false;
- uint32_t i = 0;
- uint32_t nb = 0;
+ {
+ /* ouch!! we are victim of a DAD */
+ Ipv6InterfaceAddress ifaddr;
+ bool found = false;
+ uint32_t i = 0;
+ uint32_t nb = 0;
- for (i = 0 ; i < nb ; i++)
- {
- if (ifaddr.GetAddress () == target)
- {
- found = true;
- break;
- }
- }
+ for (i = 0 ; i < nb ; i++)
+ {
+ if (ifaddr.GetAddress () == target)
+ {
+ found = true;
+ break;
+ }
+ }
- if (found)
- {
- if (ifaddr.GetState () == Ipv6InterfaceAddress::TENTATIVE || ifaddr.GetState () == Ipv6InterfaceAddress::TENTATIVE_OPTIMISTIC)
- {
- interface->SetState (ifaddr.GetAddress (), Ipv6InterfaceAddress::INVALID);
- }
+ if (found)
+ {
+ if (ifaddr.GetState () == Ipv6InterfaceAddress::TENTATIVE || ifaddr.GetState () == Ipv6InterfaceAddress::TENTATIVE_OPTIMISTIC)
+ {
+ interface->SetState (ifaddr.GetAddress (), Ipv6InterfaceAddress::INVALID);
+ }
+ }
+ /* we have not initiated any communication with the target so... discard the NA */
+ return;
}
- /* we have not initiated any communication with the target so... discard the NA */
- return;
- }
/* XXX search all options following the NA header */
/* Get LLA */
if (*packet->PeekData () != Icmpv6Header::ICMPV6_OPT_LINK_LAYER_TARGET)
- {
- return;
- }
+ {
+ return;
+ }
packet->RemoveHeader (lla);
if (entry->IsIncomplete ())
- {
- /* we receive a NA so stop the retransmission timer */
- entry->StopRetransmitTimer ();
-
- if (naHeader.GetFlagS ())
{
- /* mark it to reachable */
- waiting = entry->MarkReachable (lla.GetAddress ());
- entry->StopReachableTimer ();
- entry->StartReachableTimer ();
- /* send out waiting packet */
- for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
- {
- cache->GetInterface ()->Send (*it, src);
- }
- entry->ClearWaitingPacket ();
- }
- else
- {
- entry->MarkStale (lla.GetAddress ());
- }
-
- if (naHeader.GetFlagR ())
- {
- entry->SetRouter (true);
- }
- }
- else
- {
- /* we receive a NA so stop the probe timer or delay timer if any */
- entry->StopProbeTimer ();
- entry->StopDelayTimer ();
+ /* we receive a NA so stop the retransmission timer */
+ entry->StopRetransmitTimer ();
- /* if the Flag O is clear and mac address differs from the cache */
- if (!naHeader.GetFlagO () && lla.GetAddress ()!=entry->GetMacAddress ())
- {
- if (entry->IsReachable ())
- {
- entry->MarkStale ();
- }
- return;
- }
- else
- {
- if ((!naHeader.GetFlagO () && lla.GetAddress () == entry->GetMacAddress ()) || naHeader.GetFlagO ()) /* XXX lake "no target link-layer address option supplied" */
- {
- entry->SetMacAddress (lla.GetAddress ());
-
- if (naHeader.GetFlagS ())
+ if (naHeader.GetFlagS ())
{
- if (!entry->IsReachable ())
- {
- if (entry->IsProbe ())
- {
- waiting = entry->MarkReachable (lla.GetAddress ());
- for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
- {
- cache->GetInterface ()->Send (*it, src);
- }
- entry->ClearWaitingPacket ();
- }
- else
- {
- entry->MarkReachable (lla.GetAddress ());
- }
- }
+ /* mark it to reachable */
+ waiting = entry->MarkReachable (lla.GetAddress ());
entry->StopReachableTimer ();
entry->StartReachableTimer ();
+ /* send out waiting packet */
+ for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+ {
+ cache->GetInterface ()->Send (*it, src);
+ }
+ entry->ClearWaitingPacket ();
}
- else if (lla.GetAddress ()!=entry->GetMacAddress ())
+ else
+ {
+ entry->MarkStale (lla.GetAddress ());
+ }
+
+ if (naHeader.GetFlagR ())
{
- entry->MarkStale ();
+ entry->SetRouter (true);
+ }
+ }
+ else
+ {
+ /* we receive a NA so stop the probe timer or delay timer if any */
+ entry->StopProbeTimer ();
+ entry->StopDelayTimer ();
+
+ /* if the Flag O is clear and mac address differs from the cache */
+ if (!naHeader.GetFlagO () && lla.GetAddress ()!=entry->GetMacAddress ())
+ {
+ if (entry->IsReachable ())
+ {
+ entry->MarkStale ();
+ }
+ return;
}
- entry->SetRouter (naHeader.GetFlagR ());
- }
+ else
+ {
+ if ((!naHeader.GetFlagO () && lla.GetAddress () == entry->GetMacAddress ()) || naHeader.GetFlagO ()) /* XXX lake "no target link-layer address option supplied" */
+ {
+ entry->SetMacAddress (lla.GetAddress ());
+
+ if (naHeader.GetFlagS ())
+ {
+ if (!entry->IsReachable ())
+ {
+ if (entry->IsProbe ())
+ {
+ waiting = entry->MarkReachable (lla.GetAddress ());
+ for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+ {
+ cache->GetInterface ()->Send (*it, src);
+ }
+ entry->ClearWaitingPacket ();
+ }
+ else
+ {
+ entry->MarkReachable (lla.GetAddress ());
+ }
+ }
+ entry->StopReachableTimer ();
+ entry->StartReachableTimer ();
+ }
+ else if (lla.GetAddress ()!=entry->GetMacAddress ())
+ {
+ entry->MarkStale ();
+ }
+ entry->SetRouter (naHeader.GetFlagR ());
+ }
+ }
}
- }
}
void Icmpv6L4Protocol::HandleRedirection (Ptr<Packet> packet, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface)
@@ -668,10 +668,10 @@
/* little ugly try to find a better way */
if (*p->PeekData () == Icmpv6Header::ICMPV6_OPT_LINK_LAYER_TARGET)
- {
- hasLla = true;
- p->RemoveHeader (llOptionHeader);
- }
+ {
+ hasLla = true;
+ p->RemoveHeader (llOptionHeader);
+ }
Icmpv6OptionRedirected redirectedOptionHeader;
p->RemoveHeader (redirectedOptionHeader);
@@ -680,50 +680,50 @@
Ipv6Address redirDestination = redirectionHeader.GetDestination ();
if (hasLla)
- {
- /* update the cache if needed */
- NdiscCache::Entry* entry = 0;
- Ptr<NdiscCache> cache = FindCache (interface->GetDevice ());
+ {
+ /* update the cache if needed */
+ NdiscCache::Entry* entry = 0;
+ Ptr<NdiscCache> cache = FindCache (interface->GetDevice ());
- entry = cache->Lookup (redirTarget);
- if (!entry)
- {
- entry = cache->Add (redirTarget);
- /* destination and target different => necessarily a router */
- entry->SetRouter (!redirTarget.IsEqual (redirDestination) ? true : false);
- entry->SetMacAddress (llOptionHeader.GetAddress ());
- entry->MarkStale ();
- }
- else
- {
- if (entry->IsIncomplete () || entry->GetMacAddress () != llOptionHeader.GetAddress ())
- {
- /* update entry to STALE */
- if (entry->GetMacAddress ()!=llOptionHeader.GetAddress ())
+ entry = cache->Lookup (redirTarget);
+ if (!entry)
{
+ entry = cache->Add (redirTarget);
+ /* destination and target different => necessarily a router */
+ entry->SetRouter (!redirTarget.IsEqual (redirDestination) ? true : false);
entry->SetMacAddress (llOptionHeader.GetAddress ());
entry->MarkStale ();
}
- }
else
- {
- /* stay unchanged */
- }
+ {
+ if (entry->IsIncomplete () || entry->GetMacAddress () != llOptionHeader.GetAddress ())
+ {
+ /* update entry to STALE */
+ if (entry->GetMacAddress ()!=llOptionHeader.GetAddress ())
+ {
+ entry->SetMacAddress (llOptionHeader.GetAddress ());
+ entry->MarkStale ();
+ }
+ }
+ else
+ {
+ /* stay unchanged */
+ }
+ }
}
- }
/* add redirection in routing table */
Ptr<Ipv6> ipv6 = m_node->GetObject<Ipv6> ();
if (redirTarget.IsEqual (redirDestination))
- {
- ipv6->GetRoutingProtocol ()->NotifyAddRoute (redirDestination, Ipv6Prefix (128), Ipv6Address ("::"), ipv6->GetInterfaceForAddress (dst));
- }
+ {
+ ipv6->GetRoutingProtocol ()->NotifyAddRoute (redirDestination, Ipv6Prefix (128), Ipv6Address ("::"), ipv6->GetInterfaceForAddress (dst));
+ }
else
- {
- uint32_t ifIndex = ipv6->GetInterfaceForAddress (dst);
- ipv6->GetRoutingProtocol ()->NotifyAddRoute (redirDestination, Ipv6Prefix (128), redirTarget, ifIndex);
- }
+ {
+ uint32_t ifIndex = ipv6->GetInterfaceForAddress (dst);
+ ipv6->GetRoutingProtocol ()->NotifyAddRoute (redirDestination, Ipv6Prefix (128), redirTarget, ifIndex);
+ }
}
void Icmpv6L4Protocol::SendMessage (Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl)
@@ -748,25 +748,25 @@
Socket::SocketErrno err;
Ptr<Ipv6Route> route;
Ptr<NetDevice> oif (0); //specify non-zero if bound to a source address
-
+
header.SetDestinationAddress (dst);
route = ipv6->GetRoutingProtocol ()->RouteOutput (packet, header, oif, err);
-
+
if (route != 0)
- {
- NS_LOG_LOGIC ("Route exists");
- tag.SetTtl (ttl);
- packet->AddPacketTag (tag);
- Ipv6Address src = route->GetSource ();
+ {
+ NS_LOG_LOGIC ("Route exists");
+ tag.SetTtl (ttl);
+ packet->AddPacketTag (tag);
+ Ipv6Address src = route->GetSource ();
- icmpv6Hdr.CalculatePseudoHeaderChecksum (src, dst, packet->GetSize () + icmpv6Hdr.GetSerializedSize (), PROT_NUMBER);
- packet->AddHeader (icmpv6Hdr);
- ipv6->Send (packet, src, dst, PROT_NUMBER, route);
- }
+ icmpv6Hdr.CalculatePseudoHeaderChecksum (src, dst, packet->GetSize () + icmpv6Hdr.GetSerializedSize (), PROT_NUMBER);
+ packet->AddHeader (icmpv6Hdr);
+ ipv6->Send (packet, src, dst, PROT_NUMBER, route);
+ }
else
- {
- NS_LOG_WARN ("drop icmp message");
- }
+ {
+ NS_LOG_WARN ("drop icmp message");
+ }
}
void Icmpv6L4Protocol::SendNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags)
@@ -780,17 +780,17 @@
na.SetIpv6Target (src);
if ((flags & 1))
- {
- na.SetFlagO (true);
- }
+ {
+ na.SetFlagO (true);
+ }
if ((flags & 2) && src != Ipv6Address::GetAny ())
- {
- na.SetFlagS (true);
- }
+ {
+ na.SetFlagS (true);
+ }
if ((flags & 4))
- {
- na.SetFlagR (true);
- }
+ {
+ na.SetFlagR (true);
+ }
p->AddHeader (llOption);
na.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + na.GetSerializedSize (), PROT_NUMBER);
@@ -823,9 +823,9 @@
/* if the source is unspec, multicast the NA to all-nodes multicast */
if (src == Ipv6Address::GetAny ())
- {
- dst = Ipv6Address::GetAllNodesMulticast ();
- }
+ {
+ dst = Ipv6Address::GetAllNodesMulticast ();
+ }
NS_LOG_LOGIC ("Send NS ( from " << src << " to " << dst << " target " << target <<")");
@@ -844,9 +844,9 @@
/* if the source is unspec, multicast the NA to all-nodes multicast */
if (src != Ipv6Address::GetAny ())
- {
- p->AddHeader (llOption);
- }
+ {
+ p->AddHeader (llOption);
+ }
NS_LOG_LOGIC ("Send RS ( from " << src << " to " << dst << ")");
@@ -866,14 +866,14 @@
/* 48 = sizeof IPv6 header + sizeof ICMPv6 error header */
if (malformedPacketSize <= 1280 - 48)
- {
- header.SetPacket (malformedPacket);
- }
+ {
+ header.SetPacket (malformedPacket);
+ }
else
- {
- Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
- header.SetPacket (fragment);
- }
+ {
+ Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
+ header.SetPacket (fragment);
+ }
header.SetCode (code);
SendMessage (p, dst, header, 255);
@@ -890,14 +890,14 @@
/* 48 = sizeof IPv6 header + sizeof ICMPv6 error header */
if (malformedPacketSize <= 1280 - 48)
- {
- header.SetPacket (malformedPacket);
- }
+ {
+ header.SetPacket (malformedPacket);
+ }
else
- {
- Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
- header.SetPacket (fragment);
- }
+ {
+ Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
+ header.SetPacket (fragment);
+ }
header.SetCode (0);
header.SetMtu (mtu);
@@ -915,14 +915,14 @@
/* 48 = sizeof IPv6 header + sizeof ICMPv6 error header */
if (malformedPacketSize <= 1280 - 48)
- {
- header.SetPacket (malformedPacket);
- }
+ {
+ header.SetPacket (malformedPacket);
+ }
else
- {
- Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
- header.SetPacket (fragment);
- }
+ {
+ Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
+ header.SetPacket (fragment);
+ }
header.SetCode (code);
SendMessage (p, dst, header, 255);
@@ -939,14 +939,14 @@
/* 48 = sizeof IPv6 header + sizeof ICMPv6 error header */
if (malformedPacketSize <= 1280 -48 )
- {
- header.SetPacket (malformedPacket);
- }
+ {
+ header.SetPacket (malformedPacket);
+ }
else
- {
- Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
- header.SetPacket (fragment);
- }
+ {
+ Ptr<Packet> fragment = malformedPacket->CreateFragment (0, 1280 - 48);
+ header.SetPacket (fragment);
+ }
header.SetCode (code);
header.SetPtr (ptr);
@@ -966,34 +966,34 @@
Icmpv6OptionRedirected redirectedOptionHeader;
if ((redirectedPacketSize % 8) != 0)
- {
- Ptr<Packet> pad = Create<Packet> (8 - (redirectedPacketSize % 8));
- redirectedPacket->AddAtEnd (pad);
- }
+ {
+ Ptr<Packet> pad = Create<Packet> (8 - (redirectedPacketSize % 8));
+ redirectedPacket->AddAtEnd (pad);
+ }
if (redirHardwareTarget.GetLength ())
- {
- llOption.SetAddress (redirHardwareTarget);
- llaSize = llOption.GetSerializedSize ();
- }
+ {
+ llOption.SetAddress (redirHardwareTarget);
+ llaSize = llOption.GetSerializedSize ();
+ }
/* 56 = sizeof IPv6 header + sizeof ICMPv6 error header + sizeof redirected option */
if (redirectedPacketSize <= (1280 - 56 - llaSize))
- {
- redirectedOptionHeader.SetPacket (redirectedPacket);
- }
+ {
+ redirectedOptionHeader.SetPacket (redirectedPacket);
+ }
else
- {
- Ptr<Packet> fragment = redirectedPacket->CreateFragment (0, 1280 - 56 - llaSize);
- redirectedOptionHeader.SetPacket (fragment);
- }
+ {
+ Ptr<Packet> fragment = redirectedPacket->CreateFragment (0, 1280 - 56 - llaSize);
+ redirectedOptionHeader.SetPacket (fragment);
+ }
p->AddHeader (redirectedOptionHeader);
if (llaSize)
- {
- p->AddHeader (llOption);
- }
+ {
+ p->AddHeader (llOption);
+ }
Icmpv6Redirection redirectionHeader;
redirectionHeader.SetTarget (redirTarget);
@@ -1017,17 +1017,17 @@
na.SetIpv6Target (src);
if ((flags & 1))
- {
- na.SetFlagO (true);
- }
+ {
+ na.SetFlagO (true);
+ }
if ((flags & 2) && src != Ipv6Address::GetAny ())
- {
- na.SetFlagS (true);
- }
+ {
+ na.SetFlagS (true);
+ }
if ((flags & 4))
- {
- na.SetFlagR (true);
- }
+ {
+ na.SetFlagR (true);
+ }
na.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + na.GetSerializedSize (), PROT_NUMBER);
p->AddHeader (na);
@@ -1037,7 +1037,7 @@
ipHeader.SetNextHeader (PROT_NUMBER);
ipHeader.SetPayloadLength (p->GetSize ());
ipHeader.SetHopLimit (255);
-
+
p->AddHeader (ipHeader);
return p;
@@ -1053,9 +1053,9 @@
/* if the source is unspec, multicast the NA to all-nodes multicast */
if (src == Ipv6Address::GetAny ())
- {
- dst = Ipv6Address::GetAllNodesMulticast ();
- }
+ {
+ dst = Ipv6Address::GetAllNodesMulticast ();
+ }
NS_LOG_LOGIC ("Send NS ( from " << src << " to " << dst << " target " << target <<")");
@@ -1079,12 +1079,12 @@
NS_LOG_FUNCTION (this << device);
for (CacheList::const_iterator i = m_cacheList.begin () ; i != m_cacheList.end () ; i++)
- {
- if ((*i)->GetDevice () == device)
{
- return *i;
+ if ((*i)->GetDevice () == device)
+ {
+ return *i;
+ }
}
- }
NS_ASSERT (false);
/* quiet compiler */
@@ -1094,7 +1094,7 @@
Ptr<NdiscCache> Icmpv6L4Protocol::CreateCache (Ptr<NetDevice> device, Ptr<Ipv6Interface> interface)
{
Ptr<NdiscCache> cache = CreateObject<NdiscCache> ();
-
+
cache->SetDevice (device, interface);
device->AddLinkChangeCallback (MakeCallback (&NdiscCache::Flush, cache));
m_cacheList.push_back (cache);
@@ -1106,10 +1106,10 @@
NS_LOG_FUNCTION (this << dst << device << hardwareDestination);
if (!cache)
- {
- /* try to find the cache */
- cache = FindCache (device);
- }
+ {
+ /* try to find the cache */
+ cache = FindCache (device);
+ }
return cache->Lookup (dst);
}
@@ -1119,68 +1119,68 @@
NS_LOG_FUNCTION (this << p << dst << device << hardwareDestination);
if (!cache)
- {
- /* try to find the cache */
- cache = FindCache (device);
- }
+ {
+ /* try to find the cache */
+ cache = FindCache (device);
+ }
NdiscCache::Entry* entry = cache->Lookup (dst);
if (entry)
- {
- if (entry->IsReachable () || entry->IsDelay ())
{
- /* XXX check reachability time */
- /* send packet */
- *hardwareDestination = entry->GetMacAddress ();
- return true;
+ if (entry->IsReachable () || entry->IsDelay ())
+ {
+ /* XXX check reachability time */
+ /* send packet */
+ *hardwareDestination = entry->GetMacAddress ();
+ return true;
+ }
+ else if (entry->IsStale ())
+ {
+ /* start delay timer */
+ entry->StartDelayTimer ();
+ entry->MarkDelay ();
+ *hardwareDestination = entry->GetMacAddress ();
+ return true;
+ }
+ else /* PROBE */
+ {
+ /* queue packet */
+ entry->AddWaitingPacket (p);
+ return false;
+ }
}
- else if (entry->IsStale ())
+ else
{
- /* start delay timer */
- entry->StartDelayTimer ();
- entry->MarkDelay ();
- *hardwareDestination = entry->GetMacAddress ();
- return true;
- }
- else /* PROBE */
- {
- /* queue packet */
- entry->AddWaitingPacket (p);
+ /* we contact this node for the first time
+ * add it to the cache and send an NS
+ */
+ Ipv6Address addr;
+ NdiscCache::Entry* entry = cache->Add (dst);
+ entry->MarkIncomplete (p);
+ entry->SetRouter (false);
+
+ if (dst.IsLinkLocal ())
+ {
+ addr = cache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();
+ }
+ else if (cache->GetInterface ()->GetNAddresses () == 1) /* an interface have at least one address (link-local) */
+ {
+ /* try to resolve global address without having global address so return! */
+ cache->Remove (entry);
+ return false;
+ }
+ else
+ {
+ /* find source address that match destination */
+ addr = cache->GetInterface ()->GetAddressMatchingDestination (dst).GetAddress ();
+ }
+
+ SendNS (addr, Ipv6Address::MakeSolicitedAddress (dst), dst, cache->GetDevice ()->GetAddress ());
+
+ /* start retransmit timer */
+ entry->StartRetransmitTimer ();
return false;
}
- }
- else
- {
- /* we contact this node for the first time
- * add it to the cache and send an NS
- */
- Ipv6Address addr;
- NdiscCache::Entry* entry = cache->Add (dst);
- entry->MarkIncomplete (p);
- entry->SetRouter (false);
-
- if (dst.IsLinkLocal ())
- {
- addr = cache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();
- }
- else if (cache->GetInterface ()->GetNAddresses () == 1) /* an interface have at least one address (link-local) */
- {
- /* try to resolve global address without having global address so return! */
- cache->Remove (entry);
- return false;
- }
- else
- {
- /* find source address that match destination */
- addr = cache->GetInterface ()->GetAddressMatchingDestination (dst).GetAddress ();
- }
-
- SendNS (addr, Ipv6Address::MakeSolicitedAddress (dst), dst, cache->GetDevice ()->GetAddress ());
-
- /* start retransmit timer */
- entry->StartRetransmitTimer ();
- return false;
- }
return false;
}
@@ -1193,39 +1193,39 @@
bool found = false;
uint32_t i = 0;
uint32_t nb = interface->GetNAddresses ();
-
+
for (i = 0 ; i < nb ; i++)
- {
- ifaddr = interface->GetAddress (i);
+ {
+ ifaddr = interface->GetAddress (i);
- if (ifaddr.GetAddress () == addr)
- {
- found = true;
- break;
+ if (ifaddr.GetAddress () == addr)
+ {
+ found = true;
+ break;
+ }
}
- }
/* for the moment, this function is always called, if we was victim of a DAD the address is INVALID
* and we do not set it to PREFERRED
*/
if (found && ifaddr.GetState () != Ipv6InterfaceAddress::INVALID)
- {
- interface->SetState (ifaddr.GetAddress (), Ipv6InterfaceAddress::PREFERRED);
- NS_LOG_LOGIC ("DAD OK, interface in state PREFERRED");
+ {
+ interface->SetState (ifaddr.GetAddress (), Ipv6InterfaceAddress::PREFERRED);
+ NS_LOG_LOGIC ("DAD OK, interface in state PREFERRED");
- /* send an RS if our interface is not forwarding (router) and if address is a link-local ones
- * (because we will send RS with it)
- */
- Ptr<Ipv6> ipv6 = icmpv6->m_node->GetObject<Ipv6> ();
+ /* send an RS if our interface is not forwarding (router) and if address is a link-local ones
+ * (because we will send RS with it)
+ */
+ Ptr<Ipv6> ipv6 = icmpv6->m_node->GetObject<Ipv6> ();
- if (!ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->GetDevice ())) && addr.IsLinkLocal ())
- {
- /* XXX because all nodes start at the same time, there will be many of RS arround 1 second of simulation time
- * TODO Add random delays before sending RS
- */
- Simulator::Schedule (Seconds (0.0), &Icmpv6L4Protocol::SendRS, PeekPointer (icmpv6), ifaddr.GetAddress (), Ipv6Address::GetAllRoutersMulticast (), interface->GetDevice ()->GetAddress ());
+ if (!ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->GetDevice ())) && addr.IsLinkLocal ())
+ {
+ /* XXX because all nodes start at the same time, there will be many of RS arround 1 second of simulation time
+ * TODO Add random delays before sending RS
+ */
+ Simulator::Schedule (Seconds (0.0), &Icmpv6L4Protocol::SendRS, PeekPointer (icmpv6), ifaddr.GetAddress (), Ipv6Address::GetAllRoutersMulticast (), interface->GetDevice ()->GetAddress ());
+ }
}
- }
}
} /* namespace ns3 */
--- a/src/internet-stack/icmpv6-l4-protocol.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/icmpv6-l4-protocol.h Wed Dec 30 14:22:25 2009 +0100
@@ -31,7 +31,7 @@
namespace ns3
{
-
+
class NetDevice;
class Node;
class Packet;
@@ -44,445 +44,445 @@
*/
class Icmpv6L4Protocol : public Ipv6L4Protocol
{
- public:
- /**
- * \brief Interface ID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Interface ID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief ICMPv6 protocol number (58).
- */
- static const uint8_t PROT_NUMBER;
+ /**
+ * \brief ICMPv6 protocol number (58).
+ */
+ static const uint8_t PROT_NUMBER;
- /**
- * \brief Neighbor Discovery router constants : max initial RA initial interval.
- */
- static const uint8_t MAX_INITIAL_RTR_ADVERT_INTERVAL;
+ /**
+ * \brief Neighbor Discovery router constants : max initial RA initial interval.
+ */
+ static const uint8_t MAX_INITIAL_RTR_ADVERT_INTERVAL;
- /**
- * \brief Neighbor Discovery router constants : max initial RA transmission.
- */
- static const uint8_t MAX_INITIAL_RTR_ADVERTISEMENTS;
+ /**
+ * \brief Neighbor Discovery router constants : max initial RA transmission.
+ */
+ static const uint8_t MAX_INITIAL_RTR_ADVERTISEMENTS;
- /**
- * \brief Neighbor Discovery router constants : max final RA transmission.
- */
- static const uint8_t MAX_FINAL_RTR_ADVERTISEMENTS;
+ /**
+ * \brief Neighbor Discovery router constants : max final RA transmission.
+ */
+ static const uint8_t MAX_FINAL_RTR_ADVERTISEMENTS;
- /**
- * \brief Neighbor Discovery router constants : min delay between RA.
- */
- static const uint8_t MIN_DELAY_BETWEEN_RAS;
+ /**
+ * \brief Neighbor Discovery router constants : min delay between RA.
+ */
+ static const uint8_t MIN_DELAY_BETWEEN_RAS;
- /**
- * \brief Neighbor Discovery router constants : max delay between RA.
- */
- static const uint32_t MAX_RA_DELAY_TIME;
+ /**
+ * \brief Neighbor Discovery router constants : max delay between RA.
+ */
+ static const uint32_t MAX_RA_DELAY_TIME;
- /**
- * \brief Neighbor Discovery host constants : max RS delay.
- */
- static const uint8_t MAX_RTR_SOLICITATION_DELAY;
+ /**
+ * \brief Neighbor Discovery host constants : max RS delay.
+ */
+ static const uint8_t MAX_RTR_SOLICITATION_DELAY;
- /**
- * \brief Neighbor Discovery host constants : RS interval.
- */
- static const uint8_t RTR_SOLICITATION_INTERVAL;
+ /**
+ * \brief Neighbor Discovery host constants : RS interval.
+ */
+ static const uint8_t RTR_SOLICITATION_INTERVAL;
- /**
- * \brief Neighbor Discovery host constants : max RS transmission.
- */
- static const uint8_t MAX_RTR_SOLICITATIONS;
+ /**
+ * \brief Neighbor Discovery host constants : max RS transmission.
+ */
+ static const uint8_t MAX_RTR_SOLICITATIONS;
- /**
- * \brief Neighbor Discovery node constants : max multicast solicitations.
- */
- static const uint8_t MAX_MULTICAST_SOLICIT;
+ /**
+ * \brief Neighbor Discovery node constants : max multicast solicitations.
+ */
+ static const uint8_t MAX_MULTICAST_SOLICIT;
- /**
- * \brief Neighbor Discovery node constants : max unicast solicitations.
- */
- static const uint8_t MAX_UNICAST_SOLICIT;
+ /**
+ * \brief Neighbor Discovery node constants : max unicast solicitations.
+ */
+ static const uint8_t MAX_UNICAST_SOLICIT;
- /**
- * \brief Neighbor Discovery node constants : max anycast delay.
- */
- static const uint8_t MAX_ANYCAST_DELAY_TIME;
+ /**
+ * \brief Neighbor Discovery node constants : max anycast delay.
+ */
+ static const uint8_t MAX_ANYCAST_DELAY_TIME;
- /**
- * \brief Neighbor Discovery node constants : max NA transmission.
- */
- static const uint8_t MAX_NEIGHBOR_ADVERTISEMENT;
+ /**
+ * \brief Neighbor Discovery node constants : max NA transmission.
+ */
+ static const uint8_t MAX_NEIGHBOR_ADVERTISEMENT;
- /**
- * \brief Neighbor Discovery node constants : reachable time.
- */
- static const uint32_t REACHABLE_TIME;
+ /**
+ * \brief Neighbor Discovery node constants : reachable time.
+ */
+ static const uint32_t REACHABLE_TIME;
- /**
- * \brief Neighbor Discovery node constants : retransmission timer.
- */
- static const uint32_t RETRANS_TIMER;
+ /**
+ * \brief Neighbor Discovery node constants : retransmission timer.
+ */
+ static const uint32_t RETRANS_TIMER;
- /**
- * \brief Neighbor Discovery node constants : delay for the first probe.
- */
- static const uint8_t DELAY_FIRST_PROBE_TIME;
+ /**
+ * \brief Neighbor Discovery node constants : delay for the first probe.
+ */
+ static const uint8_t DELAY_FIRST_PROBE_TIME;
- /**
- * \brief Neighbor Discovery node constants : min random factor.
- */
- static const double MIN_RANDOM_FACTOR;
+ /**
+ * \brief Neighbor Discovery node constants : min random factor.
+ */
+ static const double MIN_RANDOM_FACTOR;
- /**
- * \brief Neighbor Discovery node constants : max random factor.
- */
- static const double MAX_RANDOM_FACTOR;
+ /**
+ * \brief Neighbor Discovery node constants : max random factor.
+ */
+ static const double MAX_RANDOM_FACTOR;
- /**
- * \brief Get ICMPv6 protocol number.
- * \return protocol number
- */
- static uint16_t GetStaticProtocolNumber ();
+ /**
+ * \brief Get ICMPv6 protocol number.
+ * \return protocol number
+ */
+ static uint16_t GetStaticProtocolNumber ();
- /**
- * \brief Constructor.
- */
- Icmpv6L4Protocol ();
+ /**
+ * \brief Constructor.
+ */
+ Icmpv6L4Protocol ();
- /**
- * \brief Destructor.
- */
- virtual ~Icmpv6L4Protocol ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Icmpv6L4Protocol ();
+
+ /**
+ * \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 This method is called by AddAgregate and completes the aggregation
+ * by setting the node in the ICMPv6 stack and adding ICMPv6 factory to
+ * IPv6 stack connected to the node.
+ */
+ void NotifyNewAggregate ();
- /**
- * \brief This method is called by AddAgregate and completes the aggregation
- * by setting the node in the ICMPv6 stack and adding ICMPv6 factory to
- * IPv6 stack connected to the node.
- */
- void NotifyNewAggregate ();
+ /**
+ * \brief Get the protocol number.
+ * \return protocol number
+ */
+ virtual int GetProtocolNumber () const;
- /**
- * \brief Get the protocol number.
- * \return protocol number
- */
- virtual int GetProtocolNumber () const;
+ /**
+ * \brief Get the version of the protocol.
+ * \return version
+ */
+ virtual int GetVersion () const;
- /**
- * \brief Get the version of the protocol.
- * \return version
- */
- virtual int GetVersion () const;
+ /**
+ * \brief Send a packet via ICMPv6, note that packet already contains ICMPv6 header.
+ * \param packet the packet to send which contains ICMPv6 header
+ * \param src source address
+ * \param dst destination address
+ * \param ttl next hop limit
+ */
+ void SendMessage (Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl);
- /**
- * \brief Send a packet via ICMPv6, note that packet already contains ICMPv6 header.
- * \param packet the packet to send which contains ICMPv6 header
- * \param src source address
- * \param dst destination address
- * \param ttl next hop limit
- */
- void SendMessage (Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl);
+ /**
+ * \brief Send a packet via ICMPv6.
+ * \param packet the packet to send
+ * \param dst destination address
+ * \param icmpv6Hdr ICMPv6 header (needed to calculate checksum
+ * after source address is determined by routing stuff
+ * \param ttl next hop limit
+ */
+ void SendMessage (Ptr<Packet> packet, Ipv6Address dst, Icmpv6Header& icmpv6Hdr, uint8_t ttl);
- /**
- * \brief Send a packet via ICMPv6.
- * \param packet the packet to send
- * \param dst destination address
- * \param icmpv6Hdr ICMPv6 header (needed to calculate checksum
- * after source address is determined by routing stuff
- * \param ttl next hop limit
- */
- void SendMessage (Ptr<Packet> packet, Ipv6Address dst, Icmpv6Header& icmpv6Hdr, uint8_t ttl);
-
- /**
- * \brief Do the Duplication Address Detection (DAD).
- * \param target target address
- * \param interface interface
- */
- void DoDAD (Ipv6Address target, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Do the Duplication Address Detection (DAD).
+ * \param target target address
+ * \param interface interface
+ */
+ void DoDAD (Ipv6Address target, Ptr<Ipv6Interface> interface);
- /**
- * \brief Send a Neighbor Adverstisement.
- * \param src source IPv6 address
- * \param dst destination IPv6 address
- * \param hardwareAddress our MAC address
- * \param flags to set (4 = flag R, 2 = flag S, 3 = flag O)
- */
- void SendNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags);
+ /**
+ * \brief Send a Neighbor Adverstisement.
+ * \param src source IPv6 address
+ * \param dst destination IPv6 address
+ * \param hardwareAddress our MAC address
+ * \param flags to set (4 = flag R, 2 = flag S, 3 = flag O)
+ */
+ void SendNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags);
+
+ /**
+ * \brief Send a Echo Reply.
+ * \param src source IPv6 address
+ * \param dst destination IPv6 address
+ * \param id id of the packet
+ * \param seq sequence number
+ * \param data auxiliary data
+ */
+ void SendEchoReply (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data);
- /**
- * \brief Send a Echo Reply.
- * \param src source IPv6 address
- * \param dst destination IPv6 address
- * \param id id of the packet
- * \param seq sequence number
- * \param data auxiliary data
- */
- void SendEchoReply (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data);
-
- /**
- * \brief Send a Neighbor Solicitation.
- * \param src source IPv6 address
- * \param dst destination IPv6 addresss
- * \param target target IPv6 address
- * \param hardwareAddress our mac address
- */
- void SendNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress);
+ /**
+ * \brief Send a Neighbor Solicitation.
+ * \param src source IPv6 address
+ * \param dst destination IPv6 addresss
+ * \param target target IPv6 address
+ * \param hardwareAddress our mac address
+ */
+ void SendNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress);
- /**
- * \brief Send an error Destination Unreachable.
- * \param malformedPacket the malformed packet
- * \param dst destination IPv6 address
- * \param code code of the error
- */
- void SendErrorDestinationUnreachable (Ptr<Packet> malformedPacket, Ipv6Address dst, uint8_t code);
+ /**
+ * \brief Send an error Destination Unreachable.
+ * \param malformedPacket the malformed packet
+ * \param dst destination IPv6 address
+ * \param code code of the error
+ */
+ void SendErrorDestinationUnreachable (Ptr<Packet> malformedPacket, Ipv6Address dst, uint8_t code);
- /**
- * \brief Send an error Too Big.
- * \param malformedPacket the malformed packet
- * \param dst destination IPv6 address
- * \param mtu the mtu
- */
- void SendErrorTooBig (Ptr<Packet> malformedPacket, Ipv6Address dst, uint32_t mtu);
+ /**
+ * \brief Send an error Too Big.
+ * \param malformedPacket the malformed packet
+ * \param dst destination IPv6 address
+ * \param mtu the mtu
+ */
+ void SendErrorTooBig (Ptr<Packet> malformedPacket, Ipv6Address dst, uint32_t mtu);
- /**
- * \brief Send an error Time Exceeded.
- * \param malformedPacket the malformed packet
- * \param dst destination IPv6 address
- * \param code code of the error
- */
- void SendErrorTimeExceeded (Ptr<Packet> malformedPacket, Ipv6Address dst, uint8_t code);
+ /**
+ * \brief Send an error Time Exceeded.
+ * \param malformedPacket the malformed packet
+ * \param dst destination IPv6 address
+ * \param code code of the error
+ */
+ void SendErrorTimeExceeded (Ptr<Packet> malformedPacket, Ipv6Address dst, uint8_t code);
- /**
- * \brief Send an error Parameter Error.
- * \param malformedPacket the malformed packet
- * \param dst destination IPv6 address
- * \param code code of the error
- * \param ptr byte of p where the error is located
- */
- void SendErrorParameterError (Ptr<Packet> malformedPacket, Ipv6Address dst, uint8_t code, uint32_t ptr);
+ /**
+ * \brief Send an error Parameter Error.
+ * \param malformedPacket the malformed packet
+ * \param dst destination IPv6 address
+ * \param code code of the error
+ * \param ptr byte of p where the error is located
+ */
+ void SendErrorParameterError (Ptr<Packet> malformedPacket, Ipv6Address dst, uint8_t code, uint32_t ptr);
- /**
- * \brief Send an ICMPv6 Redirection.
- * \param redirectedPacket the redirected packet
- * \param dst destination IPv6 address
- * \param redirTarget IPv6 target address for Icmpv6Redirection
- * \param redirDestination IPv6 destination address for Icmpv6Redirection
- * \param redirHardwareTarget L2 target address for Icmpv6OptionRdirected
- */
- void SendRedirection (Ptr<Packet> redirectedPacket, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget);
+ /**
+ * \brief Send an ICMPv6 Redirection.
+ * \param redirectedPacket the redirected packet
+ * \param dst destination IPv6 address
+ * \param redirTarget IPv6 target address for Icmpv6Redirection
+ * \param redirDestination IPv6 destination address for Icmpv6Redirection
+ * \param redirHardwareTarget L2 target address for Icmpv6OptionRdirected
+ */
+ void SendRedirection (Ptr<Packet> redirectedPacket, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget);
- /**
- * \brief Forge a Neighbor Solicitation.
- * \param src source IPv6 address
- * \param dst destination IPv6 addresss
- * \param target target IPv6 address
- * \param hardwareAddress our mac address
- * \return NS packet (with IPv6 header)
- */
- Ptr<Packet> ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress);
+ /**
+ * \brief Forge a Neighbor Solicitation.
+ * \param src source IPv6 address
+ * \param dst destination IPv6 addresss
+ * \param target target IPv6 address
+ * \param hardwareAddress our mac address
+ * \return NS packet (with IPv6 header)
+ */
+ Ptr<Packet> ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress);
- /**
- * \brief Forge a Neighbor Advertisement.
- * \param src source IPv6 address
- * \param dst destination IPv6 addresss
- * \param hardwareAddress our mac address
- * \param flags flags (bitfield => R (4), S (2), O (1))
- * \return NA packet (with IPv6 header)
- */
- Ptr<Packet> ForgeNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags);
+ /**
+ * \brief Forge a Neighbor Advertisement.
+ * \param src source IPv6 address
+ * \param dst destination IPv6 addresss
+ * \param hardwareAddress our mac address
+ * \param flags flags (bitfield => R (4), S (2), O (1))
+ * \return NA packet (with IPv6 header)
+ */
+ Ptr<Packet> ForgeNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags);
- /**
- * \brief Forge a Router Solicitation.
- * \param src source IPv6 address
- * \param dst destination IPv6 addresss
- * \param hardwareAddress our mac address
- * \return RS packet (with IPv6 header)
- */
- Ptr<Packet> ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress);
+ /**
+ * \brief Forge a Router Solicitation.
+ * \param src source IPv6 address
+ * \param dst destination IPv6 addresss
+ * \param hardwareAddress our mac address
+ * \return RS packet (with IPv6 header)
+ */
+ Ptr<Packet> ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress);
- /**
- * \brief Forge an Echo Request.
- * \param src source address
- * \param dst destination address
- * \param id ID of the packet
- * \param seq sequence number
- * \param data the data
- * \return Echo Request packet (without IPv6 header)
- */
- Ptr<Packet> ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data);
+ /**
+ * \brief Forge an Echo Request.
+ * \param src source address
+ * \param dst destination address
+ * \param id ID of the packet
+ * \param seq sequence number
+ * \param data the data
+ * \return Echo Request packet (without IPv6 header)
+ */
+ Ptr<Packet> ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data);
- /**
- * \brief Receive method.
- * \param p the packet
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- virtual enum Ipv6L4Protocol::RxStatus_e Receive (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Receive method.
+ * \param p the packet
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ virtual enum Ipv6L4Protocol::RxStatus_e Receive (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Do the Duplication Address Detection.
- * It consists in sending a NS with our IPv6 as target. If
- * we received a NA with matched target address, we could not use the address,
- * else the address pass from TENTATIVE to PERMANENT.
- * \param addr IPv6 address to test
- * \param interface interface
- */
- void DoDad (Ipv6Address addr, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Do the Duplication Address Detection.
+ * It consists in sending a NS with our IPv6 as target. If
+ * we received a NA with matched target address, we could not use the address,
+ * else the address pass from TENTATIVE to PERMANENT.
+ * \param addr IPv6 address to test
+ * \param interface interface
+ */
+ void DoDad (Ipv6Address addr, Ptr<Ipv6Interface> interface);
- /**
- * \brief Function called when DAD timeout.
- * \param icmpv6 Icmpv6L4Protocol instance
- * \param interface the interface
- * \param addr the IPv6 address
- */
- static void FunctionDadTimeout (Ptr<Icmpv6L4Protocol> icmpv6, Ipv6Interface* interface, Ipv6Address addr);
+ /**
+ * \brief Function called when DAD timeout.
+ * \param icmpv6 Icmpv6L4Protocol instance
+ * \param interface the interface
+ * \param addr the IPv6 address
+ */
+ static void FunctionDadTimeout (Ptr<Icmpv6L4Protocol> icmpv6, Ipv6Interface* interface, Ipv6Address addr);
- /**
- * \brief Lookup in the ND cache for the IPv6 address
- * \param dst destination address
- * \param device device
- * \param cache the neighbor cache
- * \param hardwareDestination hardware address
- * \note Unlike other Lookup method, it does not send NS request!
- */
- bool Lookup (Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination);
+ /**
+ * \brief Lookup in the ND cache for the IPv6 address
+ * \param dst destination address
+ * \param device device
+ * \param cache the neighbor cache
+ * \param hardwareDestination hardware address
+ * \note Unlike other Lookup method, it does not send NS request!
+ */
+ bool Lookup (Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination);
- /**
- * \brief Lookup in the ND cache for the IPv6 address (similar as ARP protocol).
- *
- * It also send NS request to target and store the waiting packet.
- * \param p the packet
- * \param dst destination address
- * \param device device
- * \param cache the neighbor cache
- * \param hardwareDestination hardware address
- * \return true if the address is in the ND cache, the hardwareDestination is updated.
- */
- bool Lookup (Ptr<Packet> p, Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination);
+ /**
+ * \brief Lookup in the ND cache for the IPv6 address (similar as ARP protocol).
+ *
+ * It also send NS request to target and store the waiting packet.
+ * \param p the packet
+ * \param dst destination address
+ * \param device device
+ * \param cache the neighbor cache
+ * \param hardwareDestination hardware address
+ * \return true if the address is in the ND cache, the hardwareDestination is updated.
+ */
+ bool Lookup (Ptr<Packet> p, Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination);
- /**
- * \brief Send a Router Solicitation.
- * \param src link-local source address
- * \param dst destination address (usealy ff02::2 i.e all-routers)
- * \param hardwareAddress link-layer address (SHOULD be included if src is not ::
- */
- void SendRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress);
+ /**
+ * \brief Send a Router Solicitation.
+ * \param src link-local source address
+ * \param dst destination address (usealy ff02::2 i.e all-routers)
+ * \param hardwareAddress link-layer address (SHOULD be included if src is not ::
+ */
+ void SendRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress);
- /**
- * \brief Create a neighbor cache.
- * \param device thet NetDevice
- * \param interface the IPv6 interface
- * \return a smart pointer of NdCache or 0 if problem
- */
- Ptr<NdiscCache> CreateCache (Ptr<NetDevice> device, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Create a neighbor cache.
+ * \param device thet NetDevice
+ * \param interface the IPv6 interface
+ * \return a smart pointer of NdCache or 0 if problem
+ */
+ Ptr<NdiscCache> CreateCache (Ptr<NetDevice> device, Ptr<Ipv6Interface> interface);
- /**
- * \brief Is the node must do DAD.
- * \return true if node has to do DAD.
- */
- bool IsAlwaysDad () const;
+ /**
+ * \brief Is the node must do DAD.
+ * \return true if node has to do DAD.
+ */
+ bool IsAlwaysDad () const;
- protected:
- /**
- * \brief Dispose this object.
- */
- virtual void DoDispose ();
+protected:
+ /**
+ * \brief Dispose this object.
+ */
+ virtual void DoDispose ();
- private:
+private:
- typedef std::list<Ptr<NdiscCache> > CacheList;
+ typedef std::list<Ptr<NdiscCache> > CacheList;
- /**
- * \brief The node.
- */
- Ptr<Node> m_node;
+ /**
+ * \brief The node.
+ */
+ Ptr<Node> m_node;
- /**
- * \brief A list of cache by device.
- */
- CacheList m_cacheList;
+ /**
+ * \brief A list of cache by device.
+ */
+ CacheList m_cacheList;
- /**
- * \brief Always do DAD ?
- */
- bool m_alwaysDad;
+ /**
+ * \brief Always do DAD ?
+ */
+ bool m_alwaysDad;
- /**
- * \brief Receive Neighbor Solicitation method.
- * \param p the packet
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- void HandleNS (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Receive Neighbor Solicitation method.
+ * \param p the packet
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ void HandleNS (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Receive Router Solicitation method.
- * \param p the packet
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- void HandleRS (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Receive Router Solicitation method.
+ * \param p the packet
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ void HandleRS (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Receive Router Advertisement method.
- * \param p the packet
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- void HandleRA (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Receive Router Advertisement method.
+ * \param p the packet
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ void HandleRA (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Receive Echo Request method.
- * \param p the packet
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- void HandleEchoRequest (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Receive Echo Request method.
+ * \param p the packet
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ void HandleEchoRequest (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Receive Neighbor Advertisement method.
- * \param p the packet
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- void HandleNA (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Receive Neighbor Advertisement method.
+ * \param p the packet
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ void HandleNA (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Receive Redirection method.
- * \param p the packet
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- void HandleRedirection (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Receive Redirection method.
+ * \param p the packet
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ void HandleRedirection (Ptr<Packet> p, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Link layer address option processing.
- * \param lla LLA option
- * \param src source address
- * \param dst destination address
- * \param interface the interface from which the packet is coming
- */
- void ReceiveLLA (Icmpv6OptionLinkLayerAddress lla, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Link layer address option processing.
+ * \param lla LLA option
+ * \param src source address
+ * \param dst destination address
+ * \param interface the interface from which the packet is coming
+ */
+ void ReceiveLLA (Icmpv6OptionLinkLayerAddress lla, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface);
- /**
- * \brief Get the cache corresponding to the device.
- * \param device the device
- */
- Ptr<NdiscCache> FindCache (Ptr<NetDevice> device);
+ /**
+ * \brief Get the cache corresponding to the device.
+ * \param device the device
+ */
+ Ptr<NdiscCache> FindCache (Ptr<NetDevice> device);
};
} /* namespace ns3 */
--- a/src/internet-stack/ipv6-autoconfigured-prefix.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-autoconfigured-prefix.cc Wed Dec 30 14:22:25 2009 +0100
@@ -28,173 +28,174 @@
namespace ns3
{
- uint32_t Ipv6AutoconfiguredPrefix::m_prefixId = 0;
+
+uint32_t Ipv6AutoconfiguredPrefix::m_prefixId = 0;
- Ipv6AutoconfiguredPrefix::Ipv6AutoconfiguredPrefix (Ptr<Node> node, uint32_t interface, Ipv6Address prefix, Ipv6Prefix mask, uint32_t preferredLifeTime, uint32_t validLifeTime, Ipv6Address router)
- {
- m_node = node;
- m_interface = interface;
- m_validLifeTime = validLifeTime;
- m_preferredLifeTime = preferredLifeTime;
- m_id = m_prefixId;
- m_prefixId ++;
- m_preferred = false;
- m_valid = false;
- m_prefix = prefix;
- m_mask = mask;
- m_defaultGatewayRouter = router;
- }
+Ipv6AutoconfiguredPrefix::Ipv6AutoconfiguredPrefix (Ptr<Node> node, uint32_t interface, Ipv6Address prefix, Ipv6Prefix mask, uint32_t preferredLifeTime, uint32_t validLifeTime, Ipv6Address router)
+{
+ m_node = node;
+ m_interface = interface;
+ m_validLifeTime = validLifeTime;
+ m_preferredLifeTime = preferredLifeTime;
+ m_id = m_prefixId;
+ m_prefixId ++;
+ m_preferred = false;
+ m_valid = false;
+ m_prefix = prefix;
+ m_mask = mask;
+ m_defaultGatewayRouter = router;
+}
- Ipv6AutoconfiguredPrefix::~Ipv6AutoconfiguredPrefix ()
- {
- }
+Ipv6AutoconfiguredPrefix::~Ipv6AutoconfiguredPrefix ()
+{
+}
- void Ipv6AutoconfiguredPrefix::SetDefaultGatewayRouter (Ipv6Address router)
- {
- m_defaultGatewayRouter = router;
- }
+void Ipv6AutoconfiguredPrefix::SetDefaultGatewayRouter (Ipv6Address router)
+{
+ m_defaultGatewayRouter = router;
+}
- Ipv6Address Ipv6AutoconfiguredPrefix::GetDefaultGatewayRouter () const
- {
- return m_defaultGatewayRouter;
- }
+Ipv6Address Ipv6AutoconfiguredPrefix::GetDefaultGatewayRouter () const
+{
+ return m_defaultGatewayRouter;
+}
- void Ipv6AutoconfiguredPrefix::SetInterface (uint32_t interface)
- {
- m_interface = interface;
- }
+void Ipv6AutoconfiguredPrefix::SetInterface (uint32_t interface)
+{
+ m_interface = interface;
+}
- uint32_t Ipv6AutoconfiguredPrefix::GetInterface () const
- {
- return m_interface;
- }
+uint32_t Ipv6AutoconfiguredPrefix::GetInterface () const
+{
+ return m_interface;
+}
- void Ipv6AutoconfiguredPrefix::SetPreferredLifeTime (uint32_t t)
- {
- m_preferredLifeTime = t;
- }
+void Ipv6AutoconfiguredPrefix::SetPreferredLifeTime (uint32_t t)
+{
+ m_preferredLifeTime = t;
+}
- uint32_t Ipv6AutoconfiguredPrefix::GetPreferredLifeTime () const
- {
- return m_preferredLifeTime;
- }
+uint32_t Ipv6AutoconfiguredPrefix::GetPreferredLifeTime () const
+{
+ return m_preferredLifeTime;
+}
- void Ipv6AutoconfiguredPrefix::SetValidLifeTime (uint32_t t)
- {
- m_validLifeTime = t;
- }
+void Ipv6AutoconfiguredPrefix::SetValidLifeTime (uint32_t t)
+{
+ m_validLifeTime = t;
+}
- uint32_t Ipv6AutoconfiguredPrefix::GetValidLifeTime () const
- {
- return m_validLifeTime;
- }
+uint32_t Ipv6AutoconfiguredPrefix::GetValidLifeTime () const
+{
+ return m_validLifeTime;
+}
- void Ipv6AutoconfiguredPrefix::MarkPreferredTime ()
- {
- m_preferred = true;
- }
+void Ipv6AutoconfiguredPrefix::MarkPreferredTime ()
+{
+ m_preferred = true;
+}
- void Ipv6AutoconfiguredPrefix::MarkValidTime ()
- {
- m_preferred = false;
- m_valid = true;
- }
+void Ipv6AutoconfiguredPrefix::MarkValidTime ()
+{
+ m_preferred = false;
+ m_valid = true;
+}
- void Ipv6AutoconfiguredPrefix::FunctionPreferredTimeout ()
- {
- NS_LOG_INFO ("Preferred Time expired for " << m_prefix);
- m_preferred = false;
- MarkValidTime ();
- StartValidTimer ();
- }
+void Ipv6AutoconfiguredPrefix::FunctionPreferredTimeout ()
+{
+ NS_LOG_INFO ("Preferred Time expired for " << m_prefix);
+ m_preferred = false;
+ MarkValidTime ();
+ StartValidTimer ();
+}
- void Ipv6AutoconfiguredPrefix::FunctionValidTimeout ()
- {
- NS_LOG_INFO ("Valid Time expired for " << m_prefix);
- m_valid = false;
- RemoveMe ();
- }
+void Ipv6AutoconfiguredPrefix::FunctionValidTimeout ()
+{
+ NS_LOG_INFO ("Valid Time expired for " << m_prefix);
+ m_valid = false;
+ RemoveMe ();
+}
- void Ipv6AutoconfiguredPrefix::StartPreferredTimer ()
- {
- NS_LOG_INFO ("Start PreferredTimer for " << m_prefix);
- m_preferredTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionPreferredTimeout, this);
- m_preferredTimer.SetDelay (Seconds (m_preferredLifeTime));
- m_preferredTimer.Schedule ();
- }
+void Ipv6AutoconfiguredPrefix::StartPreferredTimer ()
+{
+ NS_LOG_INFO ("Start PreferredTimer for " << m_prefix);
+ m_preferredTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionPreferredTimeout, this);
+ m_preferredTimer.SetDelay (Seconds (m_preferredLifeTime));
+ m_preferredTimer.Schedule ();
+}
- void Ipv6AutoconfiguredPrefix::StartValidTimer ()
- {
- NS_LOG_INFO ("Start ValidTimer for " << m_prefix);
- m_validTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionValidTimeout, this);
- m_validTimer.SetDelay (Seconds (m_validLifeTime - m_preferredLifeTime));
- m_validTimer.Schedule ();
- }
+void Ipv6AutoconfiguredPrefix::StartValidTimer ()
+{
+ NS_LOG_INFO ("Start ValidTimer for " << m_prefix);
+ m_validTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionValidTimeout, this);
+ m_validTimer.SetDelay (Seconds (m_validLifeTime - m_preferredLifeTime));
+ m_validTimer.Schedule ();
+}
- void Ipv6AutoconfiguredPrefix::StopPreferredTimer ()
- {
- NS_LOG_INFO ("Stop PreferredTimer for " << m_prefix);
- m_preferredTimer.Cancel ();
- }
+void Ipv6AutoconfiguredPrefix::StopPreferredTimer ()
+{
+ NS_LOG_INFO ("Stop PreferredTimer for " << m_prefix);
+ m_preferredTimer.Cancel ();
+}
- void Ipv6AutoconfiguredPrefix::StopValidTimer ()
- {
- NS_LOG_INFO ("Stop ValidTimer for " << m_prefix);
- m_validTimer.Cancel ();
- }
+void Ipv6AutoconfiguredPrefix::StopValidTimer ()
+{
+ NS_LOG_INFO ("Stop ValidTimer for " << m_prefix);
+ m_validTimer.Cancel ();
+}
- void Ipv6AutoconfiguredPrefix::RemoveMe ()
- {
- NS_LOG_INFO ("The prefix " << m_prefix << " will be removed on interface " << m_interface);
- Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
- ipv6->RemoveAutoconfiguredAddress (m_interface, m_prefix, m_mask, m_defaultGatewayRouter);
- }
+void Ipv6AutoconfiguredPrefix::RemoveMe ()
+{
+ NS_LOG_INFO ("The prefix " << m_prefix << " will be removed on interface " << m_interface);
+ Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
+ ipv6->RemoveAutoconfiguredAddress (m_interface, m_prefix, m_mask, m_defaultGatewayRouter);
+}
- void Ipv6AutoconfiguredPrefix::SetPreferred ()
- {
- m_preferred = true;
- }
+void Ipv6AutoconfiguredPrefix::SetPreferred ()
+{
+ m_preferred = true;
+}
- void Ipv6AutoconfiguredPrefix::SetValid ()
- {
- m_preferred = false;
- m_valid = true;
- }
+void Ipv6AutoconfiguredPrefix::SetValid ()
+{
+ m_preferred = false;
+ m_valid = true;
+}
- uint32_t Ipv6AutoconfiguredPrefix::GetId () const
- {
- return m_id;
- }
+uint32_t Ipv6AutoconfiguredPrefix::GetId () const
+{
+ return m_id;
+}
- bool Ipv6AutoconfiguredPrefix::IsPreferred () const
- {
- return m_preferred;
- }
+bool Ipv6AutoconfiguredPrefix::IsPreferred () const
+{
+ return m_preferred;
+}
- bool Ipv6AutoconfiguredPrefix::IsValid () const
- {
- return m_valid;
- }
+bool Ipv6AutoconfiguredPrefix::IsValid () const
+{
+ return m_valid;
+}
- Ipv6Address Ipv6AutoconfiguredPrefix::GetPrefix () const
- {
- return m_prefix;
- }
+Ipv6Address Ipv6AutoconfiguredPrefix::GetPrefix () const
+{
+ return m_prefix;
+}
- void Ipv6AutoconfiguredPrefix::SetPrefix (Ipv6Address prefix)
- {
- m_prefix = prefix;
- }
+void Ipv6AutoconfiguredPrefix::SetPrefix (Ipv6Address prefix)
+{
+ m_prefix = prefix;
+}
- Ipv6Prefix Ipv6AutoconfiguredPrefix::GetMask () const
- {
- return m_mask;
- }
+Ipv6Prefix Ipv6AutoconfiguredPrefix::GetMask () const
+{
+ return m_mask;
+}
- void Ipv6AutoconfiguredPrefix::SetMask (Ipv6Prefix mask)
- {
- m_mask = mask;
- }
+void Ipv6AutoconfiguredPrefix::SetMask (Ipv6Prefix mask)
+{
+ m_mask = mask;
+}
} /* namespace ns3 */
--- a/src/internet-stack/ipv6-autoconfigured-prefix.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-autoconfigured-prefix.h Wed Dec 30 14:22:25 2009 +0100
@@ -39,239 +39,239 @@
*/
class Ipv6AutoconfiguredPrefix : public Object
{
- public:
- /**
- * \brief Constructor.
- * \param node node
- * \param interface interface index
- * \param prefix IPv6 address
- * \param mask bitmask prefix
- * \param preferredLifeTime the preferred life time
- * \param validLifeTime the valid life time
- * \param router if it the prefix that configure the default gateway
- */
- Ipv6AutoconfiguredPrefix (Ptr<Node> node, uint32_t interface, Ipv6Address prefix, Ipv6Prefix mask, uint32_t preferredLifeTime, uint32_t validLifeTime, Ipv6Address router = Ipv6Address ("::"));
+public:
+ /**
+ * \brief Constructor.
+ * \param node node
+ * \param interface interface index
+ * \param prefix IPv6 address
+ * \param mask bitmask prefix
+ * \param preferredLifeTime the preferred life time
+ * \param validLifeTime the valid life time
+ * \param router if it the prefix that configure the default gateway
+ */
+ Ipv6AutoconfiguredPrefix (Ptr<Node> node, uint32_t interface, Ipv6Address prefix, Ipv6Prefix mask, uint32_t preferredLifeTime, uint32_t validLifeTime, Ipv6Address router = Ipv6Address ("::"));
- /**
- * \brief Destructor.
- */
- ~Ipv6AutoconfiguredPrefix ();
+ /**
+ * \brief Destructor.
+ */
+ ~Ipv6AutoconfiguredPrefix ();
- /**
- * \brief Set the default gateway router.
- * \param router IPv6 link-local address of the default router
- */
- void SetDefaultGatewayRouter (Ipv6Address router);
+ /**
+ * \brief Set the default gateway router.
+ * \param router IPv6 link-local address of the default router
+ */
+ void SetDefaultGatewayRouter (Ipv6Address router);
- /**
- * \brief Get the default gateway address.
- * \return IPv6 link-local address of the default router
- */
- Ipv6Address GetDefaultGatewayRouter () const;
+ /**
+ * \brief Get the default gateway address.
+ * \return IPv6 link-local address of the default router
+ */
+ Ipv6Address GetDefaultGatewayRouter () const;
- /**
- * \brief Get the interface index.
- * \return interface index
- */
- uint32_t GetInterface () const;
+ /**
+ * \brief Get the interface index.
+ * \return interface index
+ */
+ uint32_t GetInterface () const;
- /**
- * \brief Set the interface.
- * \param interface interface index to set
- */
- void SetInterface (uint32_t interface);
+ /**
+ * \brief Set the interface.
+ * \param interface interface index to set
+ */
+ void SetInterface (uint32_t interface);
- /**
- * \brief Get the prefix preferred life time.
- * \return preferred life time
- */
- uint32_t GetPreferredLifeTime () const;
+ /**
+ * \brief Get the prefix preferred life time.
+ * \return preferred life time
+ */
+ uint32_t GetPreferredLifeTime () const;
- /**
- * \brief Set the prefix preferred life time.
- * \param p the prefix preferred life time
- */
- void SetPreferredLifeTime (uint32_t p);
+ /**
+ * \brief Set the prefix preferred life time.
+ * \param p the prefix preferred life time
+ */
+ void SetPreferredLifeTime (uint32_t p);
- /**
- * \brief Get the prefix valid life time.
- * \return valid life time
- */
- uint32_t GetValidLifeTime (void) const;
+ /**
+ * \brief Get the prefix valid life time.
+ * \return valid life time
+ */
+ uint32_t GetValidLifeTime (void) const;
- /**
- * \brief Set the prefix valid life time.
- * \param v the prefix valid life time
- */
- void SetValidLifeTime (uint32_t v);
+ /**
+ * \brief Set the prefix valid life time.
+ * \param v the prefix valid life time
+ */
+ void SetValidLifeTime (uint32_t v);
- /**
- * \brief Test if the prefix is preferred.
- * \return true if prefix is in preferred state, false otherwise
- */
- bool IsPreferred () const;
+ /**
+ * \brief Test if the prefix is preferred.
+ * \return true if prefix is in preferred state, false otherwise
+ */
+ bool IsPreferred () const;
- /**
- * \brief Test if the prefix is valid.
- * \return true if prefix is in valid state, false otherwise
- */
- bool IsValid () const;
+ /**
+ * \brief Test if the prefix is valid.
+ * \return true if prefix is in valid state, false otherwise
+ */
+ bool IsValid () const;
- /**
- * \brief Set the prefix as preferred.
- */
- void SetPreferred ();
+ /**
+ * \brief Set the prefix as preferred.
+ */
+ void SetPreferred ();
- /**
- * \brief Set the prefix as valid.
- */
- void SetValid ();
+ /**
+ * \brief Set the prefix as valid.
+ */
+ void SetValid ();
- /**
- * \brief Start the preferred timer.
- */
- void StartPreferredTimer ();
+ /**
+ * \brief Start the preferred timer.
+ */
+ void StartPreferredTimer ();
- /**
- * \brief Start the valid timer.
- */
- void StartValidTimer ();
+ /**
+ * \brief Start the valid timer.
+ */
+ void StartValidTimer ();
- /**
- * \brief Stop the preferred timer.
- */
- void StopPreferredTimer ();
+ /**
+ * \brief Stop the preferred timer.
+ */
+ void StopPreferredTimer ();
- /**
- * \brief Stop the valid timer.
- */
- void StopValidTimer ();
+ /**
+ * \brief Stop the valid timer.
+ */
+ void StopValidTimer ();
- /**
- * \brief Set the prefix as preferred.
- */
- void MarkPreferredTime ();
+ /**
+ * \brief Set the prefix as preferred.
+ */
+ void MarkPreferredTime ();
- /**
- * \brief Set the prefix as valid.
- */
- void MarkValidTime ();
+ /**
+ * \brief Set the prefix as valid.
+ */
+ void MarkValidTime ();
- /**
- * \brief Signal that the preferred time expired and start the valid timer.
- */
- void FunctionPreferredTimeout ();
+ /**
+ * \brief Signal that the preferred time expired and start the valid timer.
+ */
+ void FunctionPreferredTimeout ();
- /**
- * \brief Signal that the valid time expired.
- */
- void FunctionValidTimeout ();
+ /**
+ * \brief Signal that the valid time expired.
+ */
+ void FunctionValidTimeout ();
- /**
- * \brief Remove this prefix from the prefix list.
- */
- void RemoveMe ();
+ /**
+ * \brief Remove this prefix from the prefix list.
+ */
+ void RemoveMe ();
- /**
- * \brief Get the prefix identifier.
- * \return id of the prefix.
- */
- uint32_t GetId () const;
+ /**
+ * \brief Get the prefix identifier.
+ * \return id of the prefix.
+ */
+ uint32_t GetId () const;
- /**
- * \brief Get the prefix address.
- * \return prefix address
- */
- Ipv6Address GetPrefix () const;
+ /**
+ * \brief Get the prefix address.
+ * \return prefix address
+ */
+ Ipv6Address GetPrefix () const;
- /**
- * \brief Set the prefix address.
- * \param prefix prefix address to set
- */
- void SetPrefix (Ipv6Address prefix);
+ /**
+ * \brief Set the prefix address.
+ * \param prefix prefix address to set
+ */
+ void SetPrefix (Ipv6Address prefix);
- /**
- * \brief Get the bitmask prefix.
- * \return bitmask prefix
- */
- Ipv6Prefix GetMask () const;
+ /**
+ * \brief Get the bitmask prefix.
+ * \return bitmask prefix
+ */
+ Ipv6Prefix GetMask () const;
- /**
- * \brief Set the bitmask prefix.
- * \param mask prefix
- */
- void SetMask (Ipv6Prefix mask);
+ /**
+ * \brief Set the bitmask prefix.
+ * \param mask prefix
+ */
+ void SetMask (Ipv6Prefix mask);
- private:
- /**
- * \brief a static identifier.
- */
- static uint32_t m_prefixId;
+private:
+ /**
+ * \brief a static identifier.
+ */
+ static uint32_t m_prefixId;
- /**
- * \brief the identifier of this prefix.
- */
- uint32_t m_id;
+ /**
+ * \brief the identifier of this prefix.
+ */
+ uint32_t m_id;
- /**
- * \brief The node.
- */
- Ptr<Node> m_node;
+ /**
+ * \brief The node.
+ */
+ Ptr<Node> m_node;
- /**
- * \brief The prefix IP6 address.
- */
- Ipv6Address m_prefix;
+ /**
+ * \brief The prefix IP6 address.
+ */
+ Ipv6Address m_prefix;
- /**
- * \brief The prefix bitmask (length).
- */
- Ipv6Prefix m_mask;
+ /**
+ * \brief The prefix bitmask (length).
+ */
+ Ipv6Prefix m_mask;
- /**
- * \brief Default gateway router.
- *
- * If the RA received also configured the default gateway,
- * this variable has the link-local address. Otherwise this
- * is "::"
- */
- Ipv6Address m_defaultGatewayRouter;
+ /**
+ * \brief Default gateway router.
+ *
+ * If the RA received also configured the default gateway,
+ * this variable has the link-local address. Otherwise this
+ * is "::"
+ */
+ Ipv6Address m_defaultGatewayRouter;
- /**
- * \brief The interface index (which is stored the address
- * corresponding of the prefix).
- */
- uint32_t m_interface;
+ /**
+ * \brief The interface index (which is stored the address
+ * corresponding of the prefix).
+ */
+ uint32_t m_interface;
- /**
- * \brief the valid life time.
- */
- uint32_t m_validLifeTime;
+ /**
+ * \brief the valid life time.
+ */
+ uint32_t m_validLifeTime;
- /**
- * \brief the preferred life time.
- */
- uint32_t m_preferredLifeTime;
+ /**
+ * \brief the preferred life time.
+ */
+ uint32_t m_preferredLifeTime;
- /**
- * \brief true if the prefix is preferred.
- */
- bool m_preferred;
+ /**
+ * \brief true if the prefix is preferred.
+ */
+ bool m_preferred;
- /**
- * \brief true if the prefix is valid.
- */
- bool m_valid;
+ /**
+ * \brief true if the prefix is valid.
+ */
+ bool m_valid;
- /**
- * \brief the timer for preferred life time.
- */
- Timer m_preferredTimer;
+ /**
+ * \brief the timer for preferred life time.
+ */
+ Timer m_preferredTimer;
- /**
- * \brief the timer for valid life time.
- */
- Timer m_validTimer;
+ /**
+ * \brief the timer for valid life time.
+ */
+ Timer m_validTimer;
};
} /* namespace ns3 */
--- a/src/internet-stack/ipv6-end-point-demux.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-end-point-demux.cc Wed Dec 30 14:22:25 2009 +0100
@@ -37,10 +37,10 @@
{
NS_LOG_FUNCTION_NOARGS ();
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
- {
- Ipv6EndPoint *endPoint = *i;
- delete endPoint;
- }
+ {
+ Ipv6EndPoint *endPoint = *i;
+ delete endPoint;
+ }
m_endPoints.clear ();
}
@@ -48,12 +48,12 @@
{
NS_LOG_FUNCTION (this << port);
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
- {
- if ((*i)->GetLocalPort () == port)
{
- return true;
+ if ((*i)->GetLocalPort () == port)
+ {
+ return true;
+ }
}
- }
return false;
}
@@ -61,13 +61,13 @@
{
NS_LOG_FUNCTION (this << addr << port);
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
- {
- if ((*i)->GetLocalPort () == port &&
- (*i)->GetLocalAddress () == addr)
{
- return true;
+ if ((*i)->GetLocalPort () == port &&
+ (*i)->GetLocalAddress () == addr)
+ {
+ return true;
+ }
}
- }
return false;
}
@@ -76,10 +76,10 @@
NS_LOG_FUNCTION_NOARGS ();
uint16_t port = AllocateEphemeralPort ();
if (port == 0)
- {
- NS_LOG_WARN ("Ephemeral port allocation failed.");
- return 0;
- }
+ {
+ NS_LOG_WARN ("Ephemeral port allocation failed.");
+ return 0;
+ }
Ipv6EndPoint *endPoint = new Ipv6EndPoint (Ipv6Address::GetAny (), port);
m_endPoints.push_back (endPoint);
NS_LOG_DEBUG ("Now have >>" << m_endPoints.size () << "<< endpoints.");
@@ -91,10 +91,10 @@
NS_LOG_FUNCTION (this << address);
uint16_t port = AllocateEphemeralPort ();
if (port == 0)
- {
- NS_LOG_WARN ("Ephemeral port allocation failed.");
- return 0;
- }
+ {
+ NS_LOG_WARN ("Ephemeral port allocation failed.");
+ return 0;
+ }
Ipv6EndPoint *endPoint = new Ipv6EndPoint (address, port);
m_endPoints.push_back (endPoint);
NS_LOG_DEBUG ("Now have >>" << m_endPoints.size () << "<< endpoints.");
@@ -112,10 +112,10 @@
{
NS_LOG_FUNCTION (this << address << port);
if (LookupLocal (address, port))
- {
- NS_LOG_WARN ("Duplicate address/port; failing.");
- return 0;
- }
+ {
+ NS_LOG_WARN ("Duplicate address/port; failing.");
+ return 0;
+ }
Ipv6EndPoint *endPoint = new Ipv6EndPoint (address, port);
m_endPoints.push_back (endPoint);
NS_LOG_DEBUG ("Now have >>" << m_endPoints.size () << "<< endpoints.");
@@ -123,21 +123,21 @@
}
Ipv6EndPoint* Ipv6EndPointDemux::Allocate (Ipv6Address localAddress, uint16_t localPort,
- Ipv6Address peerAddress, uint16_t peerPort)
+ Ipv6Address peerAddress, uint16_t peerPort)
{
NS_LOG_FUNCTION (this << localAddress << localPort << peerAddress << peerPort);
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
- {
- if ((*i)->GetLocalPort () == localPort &&
- (*i)->GetLocalAddress () == localAddress &&
- (*i)->GetPeerPort () == peerPort &&
- (*i)->GetPeerAddress () == peerAddress)
{
- NS_LOG_WARN ("No way we can allocate this end-point.");
- /* no way we can allocate this end-point. */
- return 0;
+ if ((*i)->GetLocalPort () == localPort &&
+ (*i)->GetLocalAddress () == localAddress &&
+ (*i)->GetPeerPort () == peerPort &&
+ (*i)->GetPeerAddress () == peerAddress)
+ {
+ NS_LOG_WARN ("No way we can allocate this end-point.");
+ /* no way we can allocate this end-point. */
+ return 0;
+ }
}
- }
Ipv6EndPoint *endPoint = new Ipv6EndPoint (localAddress, localPort);
endPoint->SetPeer (peerAddress, peerPort);
m_endPoints.push_back (endPoint);
@@ -151,14 +151,14 @@
{
NS_LOG_FUNCTION_NOARGS ();
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
- {
- if (*i == endPoint)
{
- delete endPoint;
- m_endPoints.erase (i);
- break;
+ if (*i == endPoint)
+ {
+ delete endPoint;
+ m_endPoints.erase (i);
+ break;
+ }
}
- }
}
/*
@@ -179,69 +179,69 @@
NS_LOG_DEBUG ("Looking up endpoint for destination address " << daddr);
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
- {
- Ipv6EndPoint* endP = *i;
- NS_LOG_DEBUG ("Looking at endpoint dport=" << endP->GetLocalPort ()
- << " daddr=" << endP->GetLocalAddress ()
- << " sport=" << endP->GetPeerPort ()
- << " saddr=" << endP->GetPeerAddress ());
- if (endP->GetLocalPort () != dport)
{
- NS_LOG_LOGIC ("Skipping endpoint " << &endP
- << " because endpoint dport "
- << endP->GetLocalPort ()
- << " does not match packet dport " << dport);
- continue;
- }
+ Ipv6EndPoint* endP = *i;
+ NS_LOG_DEBUG ("Looking at endpoint dport=" << endP->GetLocalPort ()
+ << " daddr=" << endP->GetLocalAddress ()
+ << " sport=" << endP->GetPeerPort ()
+ << " saddr=" << endP->GetPeerAddress ());
+ if (endP->GetLocalPort () != dport)
+ {
+ NS_LOG_LOGIC ("Skipping endpoint " << &endP
+ << " because endpoint dport "
+ << endP->GetLocalPort ()
+ << " does not match packet dport " << dport);
+ continue;
+ }
-/* Ipv6Address incomingInterfaceAddr = incomingInterface->GetAddress (); */
- NS_LOG_DEBUG ("dest addr " << daddr);
+ /* Ipv6Address incomingInterfaceAddr = incomingInterface->GetAddress (); */
+ NS_LOG_DEBUG ("dest addr " << daddr);
- bool localAddressMatchesWildCard = endP->GetLocalAddress () == Ipv6Address::GetAny ();
- bool localAddressMatchesExact = endP->GetLocalAddress () == daddr;
- bool localAddressMatchesAllRouters = endP->GetLocalAddress () == Ipv6Address::GetAllRoutersMulticast ();
+ bool localAddressMatchesWildCard = endP->GetLocalAddress () == Ipv6Address::GetAny ();
+ bool localAddressMatchesExact = endP->GetLocalAddress () == daddr;
+ bool localAddressMatchesAllRouters = endP->GetLocalAddress () == Ipv6Address::GetAllRoutersMulticast ();
- /* if no match here, keep looking */
- if (!(localAddressMatchesExact || localAddressMatchesWildCard))
- continue;
- bool remotePeerMatchesExact = endP->GetPeerPort () == sport;
- bool remotePeerMatchesWildCard = endP->GetPeerPort () == 0;
- bool remoteAddressMatchesExact = endP->GetPeerAddress () == saddr;
- bool remoteAddressMatchesWildCard = endP->GetPeerAddress () == Ipv6Address::GetAny ();
+ /* if no match here, keep looking */
+ if (!(localAddressMatchesExact || localAddressMatchesWildCard))
+ continue;
+ bool remotePeerMatchesExact = endP->GetPeerPort () == sport;
+ bool remotePeerMatchesWildCard = endP->GetPeerPort () == 0;
+ bool remoteAddressMatchesExact = endP->GetPeerAddress () == saddr;
+ bool remoteAddressMatchesWildCard = endP->GetPeerAddress () == Ipv6Address::GetAny ();
- /* If remote does not match either with exact or wildcard,i
- skip this one */
- if (!(remotePeerMatchesExact || remotePeerMatchesWildCard))
- continue;
- if (!(remoteAddressMatchesExact || remoteAddressMatchesWildCard))
- continue;
+ /* If remote does not match either with exact or wildcard,i
+ skip this one */
+ if (!(remotePeerMatchesExact || remotePeerMatchesWildCard))
+ continue;
+ if (!(remoteAddressMatchesExact || remoteAddressMatchesWildCard))
+ continue;
- /* Now figure out which return list to add this one to */
- if (localAddressMatchesWildCard &&
- remotePeerMatchesWildCard &&
- remoteAddressMatchesWildCard)
- { /* Only local port matches exactly */
- retval1.push_back (endP);
+ /* Now figure out which return list to add this one to */
+ if (localAddressMatchesWildCard &&
+ remotePeerMatchesWildCard &&
+ remoteAddressMatchesWildCard)
+ { /* Only local port matches exactly */
+ retval1.push_back (endP);
+ }
+ if ((localAddressMatchesExact || (localAddressMatchesAllRouters))&&
+ remotePeerMatchesWildCard &&
+ remoteAddressMatchesWildCard)
+ { /* Only local port and local address matches exactly */
+ retval2.push_back (endP);
+ }
+ if (localAddressMatchesWildCard &&
+ remotePeerMatchesExact &&
+ remoteAddressMatchesExact)
+ { /* All but local address */
+ retval3.push_back (endP);
+ }
+ if (localAddressMatchesExact &&
+ remotePeerMatchesExact &&
+ remoteAddressMatchesExact)
+ { /* All 4 match */
+ retval4.push_back (endP);
+ }
}
- if ((localAddressMatchesExact || (localAddressMatchesAllRouters))&&
- remotePeerMatchesWildCard &&
- remoteAddressMatchesWildCard)
- { /* Only local port and local address matches exactly */
- retval2.push_back (endP);
- }
- if (localAddressMatchesWildCard &&
- remotePeerMatchesExact &&
- remoteAddressMatchesExact)
- { /* All but local address */
- retval3.push_back (endP);
- }
- if (localAddressMatchesExact &&
- remotePeerMatchesExact &&
- remoteAddressMatchesExact)
- { /* All 4 match */
- retval4.push_back (endP);
- }
- }
/* Here we find the most exact match */
if (!retval4.empty ()) return retval4;
@@ -256,37 +256,37 @@
Ipv6EndPoint *generic = 0;
for (EndPointsI i = m_endPoints.begin () ; i != m_endPoints.end () ; i++)
- {
- uint32_t tmp = 0;
+ {
+ uint32_t tmp = 0;
- if ((*i)->GetLocalPort () != dport)
- {
- continue;
- }
+ if ((*i)->GetLocalPort () != dport)
+ {
+ continue;
+ }
- if ((*i)->GetLocalAddress () == dst && (*i)->GetPeerPort () == sport &&
- (*i)->GetPeerAddress () == src)
- {
- /* this is an exact match. */
- return *i;
- }
+ if ((*i)->GetLocalAddress () == dst && (*i)->GetPeerPort () == sport &&
+ (*i)->GetPeerAddress () == src)
+ {
+ /* this is an exact match. */
+ return *i;
+ }
- if ((*i)->GetLocalAddress () == Ipv6Address::GetAny ())
- {
- tmp ++;
- }
+ if ((*i)->GetLocalAddress () == Ipv6Address::GetAny ())
+ {
+ tmp ++;
+ }
- if ((*i)->GetPeerAddress () == Ipv6Address::GetAny ())
- {
- tmp ++;
- }
+ if ((*i)->GetPeerAddress () == Ipv6Address::GetAny ())
+ {
+ tmp ++;
+ }
- if (tmp < genericity)
- {
- generic = (*i);
- genericity = tmp;
+ if (tmp < genericity)
+ {
+ generic = (*i);
+ genericity = tmp;
+ }
}
- }
return generic;
}
@@ -295,17 +295,17 @@
NS_LOG_FUNCTION_NOARGS ();
uint16_t port = m_ephemeral;
do
- {
- port++;
- if (port == 65535)
{
- port = 49152;
- }
- if (!LookupPortLocal (port))
- {
- return port;
- }
- } while (port != m_ephemeral);
+ port++;
+ if (port == 65535)
+ {
+ port = 49152;
+ }
+ if (!LookupPortLocal (port))
+ {
+ return port;
+ }
+ } while (port != m_ephemeral);
return 0;
}
--- a/src/internet-stack/ipv6-end-point-demux.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-end-point-demux.h Wed Dec 30 14:22:25 2009 +0100
@@ -37,122 +37,122 @@
*/
class Ipv6EndPointDemux
{
- public:
- typedef std::list<Ipv6EndPoint *>EndPoints;
- typedef std::list<Ipv6EndPoint *>::iterator EndPointsI;
+public:
+ typedef std::list<Ipv6EndPoint *>EndPoints;
+ typedef std::list<Ipv6EndPoint *>::iterator EndPointsI;
- /**
- * \brief Constructor.
- */
- Ipv6EndPointDemux ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6EndPointDemux ();
- /**
- * \brief Destructor.
- */
- ~Ipv6EndPointDemux ();
+ /**
+ * \brief Destructor.
+ */
+ ~Ipv6EndPointDemux ();
- /**
- * \brief Lookup for port local.
- * \param port port to test
- * \return true if a port local is in EndPoints, false otherwise
- */
- bool LookupPortLocal (uint16_t port);
+ /**
+ * \brief Lookup for port local.
+ * \param port port to test
+ * \return true if a port local is in EndPoints, false otherwise
+ */
+ bool LookupPortLocal (uint16_t port);
- /**
- * \brief Lookup for address and port.
- * \param addr address to test
- * \param port port to test
- * \return true if there is a match in EndPoints, false otherwise
- */
- bool LookupLocal (Ipv6Address addr, uint16_t port);
+ /**
+ * \brief Lookup for address and port.
+ * \param addr address to test
+ * \param port port to test
+ * \return true if there is a match in EndPoints, false otherwise
+ */
+ bool LookupLocal (Ipv6Address addr, uint16_t port);
- /**
- * \brief lookup for a match with all the parameters.
- * \param dst destination address to test
- * \param dport destination port to test
- * \param src source address to test
- * \param sport source port to test
- * \param incomingInterface the incoming interface
- * \return list en IPv6EndPoints (could be 0 element)
- */
- EndPoints Lookup (Ipv6Address dst, uint16_t dport, Ipv6Address src, uint16_t sport, Ptr<Ipv6Interface> incomingInterface);
+ /**
+ * \brief lookup for a match with all the parameters.
+ * \param dst destination address to test
+ * \param dport destination port to test
+ * \param src source address to test
+ * \param sport source port to test
+ * \param incomingInterface the incoming interface
+ * \return list en IPv6EndPoints (could be 0 element)
+ */
+ EndPoints Lookup (Ipv6Address dst, uint16_t dport, Ipv6Address src, uint16_t sport, Ptr<Ipv6Interface> incomingInterface);
- /**
- * \brief Simple lookup for a four-tuple match.
- * \param dst destination address to test
- * \param dport destination port to test
- * \param src source address to test
- * \param sport source port to test
- * \return match or 0 if not found
- */
- Ipv6EndPoint* SimpleLookup (Ipv6Address dst, uint16_t dport, Ipv6Address src, uint16_t sport);
+ /**
+ * \brief Simple lookup for a four-tuple match.
+ * \param dst destination address to test
+ * \param dport destination port to test
+ * \param src source address to test
+ * \param sport source port to test
+ * \return match or 0 if not found
+ */
+ Ipv6EndPoint* SimpleLookup (Ipv6Address dst, uint16_t dport, Ipv6Address src, uint16_t sport);
- /**
- * \brief Allocate a Ipv6EndPoint.
- * \return an empty Ipv6EndPoint instance
- */
- Ipv6EndPoint *Allocate (void);
+ /**
+ * \brief Allocate a Ipv6EndPoint.
+ * \return an empty Ipv6EndPoint instance
+ */
+ Ipv6EndPoint *Allocate (void);
- /**
- * \brief Allocate a Ipv6EndPoint.
- * \param address IPv6 address
- * \return an Ipv6EndPoint instance
- */
- Ipv6EndPoint *Allocate (Ipv6Address address);
+ /**
+ * \brief Allocate a Ipv6EndPoint.
+ * \param address IPv6 address
+ * \return an Ipv6EndPoint instance
+ */
+ Ipv6EndPoint *Allocate (Ipv6Address address);
- /**
- * \brief Allocate a Ipv6EndPoint.
- * \param port local port
- * \return an Ipv6EndPoint instance
- */
- Ipv6EndPoint *Allocate (uint16_t port);
+ /**
+ * \brief Allocate a Ipv6EndPoint.
+ * \param port local port
+ * \return an Ipv6EndPoint instance
+ */
+ Ipv6EndPoint *Allocate (uint16_t port);
- /**
- * \brief Allocate a Ipv6EndPoint.
- * \param address local address
- * \param port local port
- * \return an Ipv6EndPoint instance
- */
- Ipv6EndPoint *Allocate (Ipv6Address address, uint16_t port);
+ /**
+ * \brief Allocate a Ipv6EndPoint.
+ * \param address local address
+ * \param port local port
+ * \return an Ipv6EndPoint instance
+ */
+ Ipv6EndPoint *Allocate (Ipv6Address address, uint16_t port);
- /**
- * \brief Allocate a Ipv6EndPoint.
- * \param localAddress local address
- * \param localPort local port
- * \param peerAddress peer address
- * \param peerPort peer port
- * \return an Ipv6EndPoint instance
- */
- Ipv6EndPoint *Allocate (Ipv6Address localAddress, uint16_t localPort, Ipv6Address peerAddress, uint16_t peerPort);
+ /**
+ * \brief Allocate a Ipv6EndPoint.
+ * \param localAddress local address
+ * \param localPort local port
+ * \param peerAddress peer address
+ * \param peerPort peer port
+ * \return an Ipv6EndPoint instance
+ */
+ Ipv6EndPoint *Allocate (Ipv6Address localAddress, uint16_t localPort, Ipv6Address peerAddress, uint16_t peerPort);
- /**
- * \brief Remove a end point.
- * \param endPoint the end point to remove
- */
- void DeAllocate (Ipv6EndPoint *endPoint);
+ /**
+ * \brief Remove a end point.
+ * \param endPoint the end point to remove
+ */
+ void DeAllocate (Ipv6EndPoint *endPoint);
- /**
- * \brief Get the entire list of end points registered.
- * \return list of Ipv6EndPoint
- */
- EndPoints GetEndPoints () const;
+ /**
+ * \brief Get the entire list of end points registered.
+ * \return list of Ipv6EndPoint
+ */
+ EndPoints GetEndPoints () const;
- private:
- /**
- * \brief Allocate a ephemeral port.
- * \return a port
- */
- uint16_t AllocateEphemeralPort ();
+private:
+ /**
+ * \brief Allocate a ephemeral port.
+ * \return a port
+ */
+ uint16_t AllocateEphemeralPort ();
- /**
- * \brief The ephemeral port.
- */
- uint16_t m_ephemeral;
+ /**
+ * \brief The ephemeral port.
+ */
+ uint16_t m_ephemeral;
- /**
- * \brief A list of IPv6 end points.
- */
- EndPoints m_endPoints;
+ /**
+ * \brief A list of IPv6 end points.
+ */
+ EndPoints m_endPoints;
};
} /* namespace ns3 */
--- a/src/internet-stack/ipv6-extension-header.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-extension-header.cc Wed Dec 30 14:22:25 2009 +0100
@@ -45,7 +45,7 @@
}
Ipv6ExtensionHeader::Ipv6ExtensionHeader ()
-: m_nextHeader (0),
+ : m_nextHeader (0),
m_length (0),
m_data (0)
{
@@ -121,7 +121,7 @@
}
OptionField::OptionField (uint32_t optionsOffset)
-: m_optionData (0),
+ : m_optionData (0),
m_optionsOffset (optionsOffset)
{
}
@@ -325,7 +325,7 @@
}
Ipv6ExtensionFragmentHeader::Ipv6ExtensionFragmentHeader ()
-: m_offset (0),
+ : m_offset (0),
m_identification (0)
{
}
@@ -416,7 +416,7 @@
}
Ipv6ExtensionRoutingHeader::Ipv6ExtensionRoutingHeader ()
-: m_typeRouting (0),
+ : m_typeRouting (0),
m_segmentsLeft (0)
{
}
@@ -495,7 +495,7 @@
}
Ipv6ExtensionLooseRoutingHeader::Ipv6ExtensionLooseRoutingHeader ()
-: m_routersAddress (0)
+ : m_routersAddress (0)
{
}
--- a/src/internet-stack/ipv6-extension-header.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-extension-header.h Wed Dec 30 14:22:25 2009 +0100
@@ -38,94 +38,94 @@
*/
class Ipv6ExtensionHeader : public Header
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionHeader ();
- /**
- * \brief Set the "Next header" field.
- * \param nextHeader the next header number
- */
- void SetNextHeader (uint8_t nextHeader);
+ /**
+ * \brief Set the "Next header" field.
+ * \param nextHeader the next header number
+ */
+ void SetNextHeader (uint8_t nextHeader);
- /**
- * \brief Get the next header.
- * \return the next header number
- */
- uint8_t GetNextHeader () const;
+ /**
+ * \brief Get the next header.
+ * \return the next header number
+ */
+ uint8_t GetNextHeader () const;
- /**
- * brief Set the length of the extension.
- * \param length the length of the extension in bytes
- */
- void SetLength (uint16_t length);
+ /**
+ * brief Set the length of the extension.
+ * \param length the length of the extension in bytes
+ */
+ void SetLength (uint16_t length);
- /**
- * \brief Get the length of the extension.
- * \return the length of the extension
- */
- uint16_t GetLength () const;
+ /**
+ * \brief Get the length of the extension.
+ * \return the length of the extension
+ */
+ uint16_t GetLength () const;
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The "next header" field.
- */
- uint8_t m_nextHeader;
+private:
+ /**
+ * \brief The "next header" field.
+ */
+ uint8_t m_nextHeader;
- /**
- * \brief The "length" field.
- */
- uint8_t m_length;
+ /**
+ * \brief The "length" field.
+ */
+ uint8_t m_length;
- /**
- * \brief The data of the extension.
- */
- Buffer m_data;
+ /**
+ * \brief The data of the extension.
+ */
+ Buffer m_data;
};
/**
@@ -140,74 +140,74 @@
*/
class OptionField
{
- public:
- /**
- * \brief Constructor.
- * \param optionsOffset option offset
- */
- OptionField (uint32_t optionsOffset);
-
- /**
- * \brief Destructor.
- */
- ~OptionField ();
+public:
+ /**
+ * \brief Constructor.
+ * \param optionsOffset option offset
+ */
+ OptionField (uint32_t optionsOffset);
+
+ /**
+ * \brief Destructor.
+ */
+ ~OptionField ();
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize all added options.
- * \param start Buffer iterator
- */
- void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize all added options.
+ * \param start Buffer iterator
+ */
+ void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \param length length
- * \return size of the packet
- */
- uint32_t Deserialize (Buffer::Iterator start, uint32_t length);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \param length length
+ * \return size of the packet
+ */
+ uint32_t Deserialize (Buffer::Iterator start, uint32_t length);
- /**
- * \brief Serialize the option, prepending pad1 or padn option as necessary
- * \param option the option header to serialize
- */
- void AddOption (Ipv6OptionHeader const& option);
+ /**
+ * \brief Serialize the option, prepending pad1 or padn option as necessary
+ * \param option the option header to serialize
+ */
+ void AddOption (Ipv6OptionHeader const& option);
- /**
- * \brief Get the offset where the options begin, measured from the start of
- * the extension header.
- * \return the offset from the start of the extension header
- */
- uint32_t GetOptionsOffset ();
+ /**
+ * \brief Get the offset where the options begin, measured from the start of
+ * the extension header.
+ * \return the offset from the start of the extension header
+ */
+ uint32_t GetOptionsOffset ();
- /**
- * \brief Get the buffer.
- * \return buffer
- */
- Buffer GetOptionBuffer ();
+ /**
+ * \brief Get the buffer.
+ * \return buffer
+ */
+ Buffer GetOptionBuffer ();
- private:
+private:
- /**
- * \brief Calculate padding.
- * \param alignment alignment
- */
- uint32_t CalculatePad (Ipv6OptionHeader::Alignment alignment) const;
+ /**
+ * \brief Calculate padding.
+ * \param alignment alignment
+ */
+ uint32_t CalculatePad (Ipv6OptionHeader::Alignment alignment) const;
- /**
- * \brief Data payload.
- */
- Buffer m_optionData;
+ /**
+ * \brief Data payload.
+ */
+ Buffer m_optionData;
- /**
- * \brief Offset.
- */
- uint32_t m_optionsOffset;
+ /**
+ * \brief Offset.
+ */
+ uint32_t m_optionsOffset;
};
/**
@@ -216,54 +216,54 @@
*/
class Ipv6ExtensionHopByHopHeader : public Ipv6ExtensionHeader, public OptionField
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionHopByHopHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionHopByHopHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionHopByHopHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionHopByHopHeader ();
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
};
/**
@@ -272,54 +272,54 @@
*/
class Ipv6ExtensionDestinationHeader : public Ipv6ExtensionHeader, public OptionField
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionDestinationHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionDestinationHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionDestinationHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionDestinationHeader ();
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
};
/**
@@ -328,101 +328,101 @@
*/
class Ipv6ExtensionFragmentHeader : public Ipv6ExtensionHeader
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionFragmentHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionFragmentHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionFragmentHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionFragmentHeader ();
- /**
- * \brief Set the "Offset" field.
- * \param offset the offset of the fragment
- */
- void SetOffset (uint16_t offset);
+ /**
+ * \brief Set the "Offset" field.
+ * \param offset the offset of the fragment
+ */
+ void SetOffset (uint16_t offset);
- /**
- * \brief Get the field "Offset".
- * \return the offset of the fragment
- */
- uint16_t GetOffset () const;
+ /**
+ * \brief Get the field "Offset".
+ * \return the offset of the fragment
+ */
+ uint16_t GetOffset () const;
- /**
- * \brief Set the status of "More Fragment" bit.
- * \param moreFragment the bit "More Fragment"
- */
- void SetMoreFragment (bool moreFragment);
+ /**
+ * \brief Set the status of "More Fragment" bit.
+ * \param moreFragment the bit "More Fragment"
+ */
+ void SetMoreFragment (bool moreFragment);
- /**
- * \brief Get the status of "More Fragment" bit.
- * \return the status of "More Fragment" bit.
- */
- bool GetMoreFragment () const;
+ /**
+ * \brief Get the status of "More Fragment" bit.
+ * \return the status of "More Fragment" bit.
+ */
+ bool GetMoreFragment () const;
- /**
- * \brief Set the "Identification" field.
- * \param identification the identifier of the fragment
- */
- void SetIdentification (uint32_t identification);
+ /**
+ * \brief Set the "Identification" field.
+ * \param identification the identifier of the fragment
+ */
+ void SetIdentification (uint32_t identification);
- /**
- * \brief Get the field "Identification".
- * \return the identifier of the fragment
- */
- uint32_t GetIdentification () const;
+ /**
+ * \brief Get the field "Identification".
+ * \return the identifier of the fragment
+ */
+ uint32_t GetIdentification () const;
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief Offset of the fragment and More Fragment bit.
- */
- uint16_t m_offset;
+private:
+ /**
+ * \brief Offset of the fragment and More Fragment bit.
+ */
+ uint16_t m_offset;
- /**
- * \brief Identifier of the packet.
- */
- uint32_t m_identification;
+ /**
+ * \brief Identifier of the packet.
+ */
+ uint32_t m_identification;
};
/**
@@ -431,89 +431,89 @@
*/
class Ipv6ExtensionRoutingHeader : public Ipv6ExtensionHeader
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionRoutingHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionRoutingHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionRoutingHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionRoutingHeader ();
- /**
- * \brief Set the "Type of Routing" field.
- * \param typeRouting the type of routing
- */
- void SetTypeRouting (uint8_t typeRouting);
+ /**
+ * \brief Set the "Type of Routing" field.
+ * \param typeRouting the type of routing
+ */
+ void SetTypeRouting (uint8_t typeRouting);
- /**
- * \brief Get the field "Type of Routing".
- * \return the type of routing
- */
- uint8_t GetTypeRouting () const;
+ /**
+ * \brief Get the field "Type of Routing".
+ * \return the type of routing
+ */
+ uint8_t GetTypeRouting () const;
- /**
- * \brief Set the "Segments left" field.
- * \param segmentsLeft the number of segments left
- */
- void SetSegmentsLeft (uint8_t segmentsLeft);
+ /**
+ * \brief Set the "Segments left" field.
+ * \param segmentsLeft the number of segments left
+ */
+ void SetSegmentsLeft (uint8_t segmentsLeft);
- /**
- * \brief Get the field "Segments left".
- * \return the number of segments left
- */
- uint8_t GetSegmentsLeft () const;
+ /**
+ * \brief Get the field "Segments left".
+ * \return the number of segments left
+ */
+ uint8_t GetSegmentsLeft () const;
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief Type of routing.
- */
- uint8_t m_typeRouting;
+private:
+ /**
+ * \brief Type of routing.
+ */
+ uint8_t m_typeRouting;
- /**
- * \brief Number of left segments.
- */
- uint8_t m_segmentsLeft;
+ /**
+ * \brief Number of left segments.
+ */
+ uint8_t m_segmentsLeft;
};
/**
@@ -522,97 +522,97 @@
*/
class Ipv6ExtensionLooseRoutingHeader : public Ipv6ExtensionRoutingHeader
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionLooseRoutingHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionLooseRoutingHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionLooseRoutingHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionLooseRoutingHeader ();
- /**
- * \brief Set the number of routers' address.
- * \param n the number of routers' address
- */
- void SetNumberAddress (uint8_t n);
+ /**
+ * \brief Set the number of routers' address.
+ * \param n the number of routers' address
+ */
+ void SetNumberAddress (uint8_t n);
- /**
- * \brief Set the vector of routers' address
- * \param routersAddress the vector of routers's address
- */
- void SetRoutersAddress (std::vector<Ipv6Address> routersAddress);
+ /**
+ * \brief Set the vector of routers' address
+ * \param routersAddress the vector of routers's address
+ */
+ void SetRoutersAddress (std::vector<Ipv6Address> routersAddress);
- /**
- * \brief Get the vector of routers' address
- * \return the vector of routers' address
- */
- std::vector<Ipv6Address> GetRoutersAddress () const;
+ /**
+ * \brief Get the vector of routers' address
+ * \return the vector of routers' address
+ */
+ std::vector<Ipv6Address> GetRoutersAddress () const;
- /**
- * \brief Set a Router IPv6 Address.
- * \param index the index of the IPv6 Address
- * \param addr the new IPv6 Address
- */
- void SetRouterAddress (uint8_t index, Ipv6Address addr);
+ /**
+ * \brief Set a Router IPv6 Address.
+ * \param index the index of the IPv6 Address
+ * \param addr the new IPv6 Address
+ */
+ void SetRouterAddress (uint8_t index, Ipv6Address addr);
- /**
- * \brief Get a Router IPv6 Address.
- * \param index the index of the IPv6 Address
- * \return the router IPv6 Address
- */
- Ipv6Address GetRouterAddress (uint8_t index) const;
+ /**
+ * \brief Get a Router IPv6 Address.
+ * \param index the index of the IPv6 Address
+ * \return the router IPv6 Address
+ */
+ Ipv6Address GetRouterAddress (uint8_t index) const;
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief A vector of IPv6 Address.
- */
- typedef std::vector<Ipv6Address> VectorIpv6Address_t;
+private:
+ /**
+ * \brief A vector of IPv6 Address.
+ */
+ typedef std::vector<Ipv6Address> VectorIpv6Address_t;
- /**
- * \brief The vector of Routers' IPv6 Address.
- */
- VectorIpv6Address_t m_routersAddress;
+ /**
+ * \brief The vector of Routers' IPv6 Address.
+ */
+ VectorIpv6Address_t m_routersAddress;
};
/**
@@ -621,54 +621,54 @@
*/
class Ipv6ExtensionESPHeader : public Ipv6ExtensionHeader
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionESPHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionESPHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionESPHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionESPHeader ();
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
};
/**
@@ -677,54 +677,54 @@
*/
class Ipv6ExtensionAHHeader : public Ipv6ExtensionHeader
{
- public:
- /**
- * \brief Get the type identificator.
- * \return type identificator
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type identificator.
+ * \return type identificator
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Get the instance type ID.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId () const;
+ /**
+ * \brief Get the instance type ID.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId () const;
- /**
- * \brief Constructor.
- */
- Ipv6ExtensionAHHeader ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6ExtensionAHHeader ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6ExtensionAHHeader ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6ExtensionAHHeader ();
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream &os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream &os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize () const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize () const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
};
} // namespace ns3
--- a/src/internet-stack/ipv6-extension.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-extension.cc Wed Dec 30 14:22:25 2009 +0100
@@ -523,7 +523,7 @@
}
Ipv6ExtensionFragment::Fragments::Fragments ()
-: m_moreFragment (0)
+ : m_moreFragment (0)
{
}
--- a/src/internet-stack/ipv6-interface.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-interface.cc Wed Dec 30 14:22:25 2009 +0100
@@ -70,31 +70,31 @@
void Ipv6Interface::DoSetup ()
{
NS_LOG_FUNCTION_NOARGS ();
-
+
if (m_node == 0 || m_device == 0)
- {
- return;
- }
-
+ {
+ return;
+ }
+
/* set up link-local address */
if (!DynamicCast<LoopbackNetDevice> (m_device)) /* no autoconf for ip6-localhost */
- {
- Address addr = GetDevice ()->GetAddress ();
+ {
+ Address addr = GetDevice ()->GetAddress ();
- if (Mac48Address::IsMatchingType (addr))
- {
- Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address::ConvertFrom (addr)), Ipv6Prefix (64));
- AddAddress (ifaddr);
+ if (Mac48Address::IsMatchingType (addr))
+ {
+ Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address::ConvertFrom (addr)), Ipv6Prefix (64));
+ AddAddress (ifaddr);
+ }
+ else
+ {
+ NS_ASSERT_MSG (false, "IPv6 autoconf for this kind of address not implemented.");
+ }
}
- else
+ else
{
- NS_ASSERT_MSG (false, "IPv6 autoconf for this kind of address not implemented.");
+ return; /* no NDISC cache for ip6-localhost */
}
- }
- else
- {
- return; /* no NDISC cache for ip6-localhost */
- }
Ptr<Icmpv6L4Protocol> icmpv6 = m_node->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
m_ndCache = icmpv6->CreateCache (m_device, this);
@@ -149,9 +149,9 @@
NS_LOG_FUNCTION_NOARGS ();
if (m_ifup)
- {
- return;
- }
+ {
+ return;
+ }
m_ifup = true;
}
@@ -181,30 +181,30 @@
/* DAD handling */
if (!addr.IsAny ())
- {
- for (Ipv6InterfaceAddressListCI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
{
- if ((*it).GetAddress () == addr)
- {
- return false;
- }
- }
+ for (Ipv6InterfaceAddressListCI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
+ {
+ if ((*it).GetAddress () == addr)
+ {
+ return false;
+ }
+ }
+
+ m_addresses.push_back (iface);
- m_addresses.push_back (iface);
-
- if (!addr.IsAny () || !addr.IsLocalhost ())
- {
- /* DAD handling */
- Ptr<Icmpv6L4Protocol> icmpv6 = m_node->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
+ if (!addr.IsAny () || !addr.IsLocalhost ())
+ {
+ /* DAD handling */
+ Ptr<Icmpv6L4Protocol> icmpv6 = m_node->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
- if (icmpv6 && icmpv6->IsAlwaysDad ())
- {
- Simulator::Schedule (Seconds (0.), &Icmpv6L4Protocol::DoDAD, icmpv6, addr, this);
- Simulator::Schedule (Seconds (1.), &Icmpv6L4Protocol::FunctionDadTimeout, icmpv6, this, addr);
- }
+ if (icmpv6 && icmpv6->IsAlwaysDad ())
+ {
+ Simulator::Schedule (Seconds (0.), &Icmpv6L4Protocol::DoDAD, icmpv6, addr, this);
+ Simulator::Schedule (Seconds (1.), &Icmpv6L4Protocol::FunctionDadTimeout, icmpv6, this, addr);
+ }
+ }
+ return true;
}
- return true;
- }
/* bad address */
return false;
@@ -216,12 +216,12 @@
NS_LOG_FUNCTION_NOARGS ();
for (Ipv6InterfaceAddressListCI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
- {
- if ((*it).GetAddress ().IsLinkLocal ())
{
- return (*it);
+ if ((*it).GetAddress ().IsLinkLocal ())
+ {
+ return (*it);
+ }
}
- }
NS_ASSERT_MSG (false, "No link-local address on interface " << this);
Ipv6InterfaceAddress addr;
return addr; /* quiet compiler */
@@ -233,16 +233,16 @@
uint32_t i = 0;
if (m_addresses.size () > index)
- {
- for (Ipv6InterfaceAddressListCI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
{
- if (i == index)
- {
- return (*it);
- }
- i++;
+ for (Ipv6InterfaceAddressListCI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
+ {
+ if (i == index)
+ {
+ return (*it);
+ }
+ i++;
+ }
}
- }
NS_ASSERT_MSG (false, "Address " << index << " not found");
Ipv6InterfaceAddress addr;
@@ -261,22 +261,22 @@
uint32_t i = 0;
if (m_addresses.size () < index)
- {
- NS_ASSERT_MSG (false, "Try to remove index that don't exist in Ipv6Interface::RemoveAddress");
- }
-
- for (Ipv6InterfaceAddressListI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
- {
- if (i == index)
{
- Ipv6InterfaceAddress iface = (*it);
- m_addresses.erase (it);
- return iface;
+ NS_ASSERT_MSG (false, "Try to remove index that don't exist in Ipv6Interface::RemoveAddress");
}
- i++;
- }
-
+ for (Ipv6InterfaceAddressListI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
+ {
+ if (i == index)
+ {
+ Ipv6InterfaceAddress iface = (*it);
+ m_addresses.erase (it);
+ return iface;
+ }
+
+ i++;
+ }
+
NS_ASSERT_MSG (false, "Address " << index << " not found");
Ipv6InterfaceAddress addr;
return addr; /* quiet compiler */
@@ -285,18 +285,18 @@
Ipv6InterfaceAddress Ipv6Interface::GetAddressMatchingDestination (Ipv6Address dst)
{
NS_LOG_FUNCTION (this << dst);
-
+
for (Ipv6InterfaceAddressList::const_iterator it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
- {
- Ipv6InterfaceAddress ifaddr = (*it);
+ {
+ Ipv6InterfaceAddress ifaddr = (*it);
- if (ifaddr.GetPrefix ().IsMatch (ifaddr.GetAddress (), dst))
- {
- return ifaddr;
+ if (ifaddr.GetPrefix ().IsMatch (ifaddr.GetAddress (), dst))
+ {
+ return ifaddr;
+ }
}
- }
-/* NS_ASSERT_MSG (false, "Not matching address."); */
+ /* NS_ASSERT_MSG (false, "Not matching address."); */
Ipv6InterfaceAddress ret;
return ret; /* quiet compiler */
}
@@ -307,69 +307,69 @@
Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
if (!IsUp ())
- {
- return;
- }
-
+ {
+ return;
+ }
+
/* check if destination is localhost (::1) */
if (DynamicCast<LoopbackNetDevice> (m_device))
- {
- /* XXX additional checks needed here (such as whether multicast
- * goes to loopback)?
- */
- m_device->Send (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER);
- return;
- }
+ {
+ /* XXX additional checks needed here (such as whether multicast
+ * goes to loopback)?
+ */
+ m_device->Send (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER);
+ return;
+ }
/* check if destination is for one of our interface */
for (Ipv6InterfaceAddressListCI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
- {
- if (dest == (*it).GetAddress ())
{
- ipv6->Receive (m_device, p, Ipv6L3Protocol::PROT_NUMBER,
- m_device->GetBroadcast (),
- m_device->GetBroadcast (),
- NetDevice::PACKET_HOST // note: linux uses PACKET_LOOPBACK here
- );
- return;
+ if (dest == (*it).GetAddress ())
+ {
+ ipv6->Receive (m_device, p, Ipv6L3Protocol::PROT_NUMBER,
+ m_device->GetBroadcast (),
+ m_device->GetBroadcast (),
+ NetDevice::PACKET_HOST // note: linux uses PACKET_LOOPBACK here
+ );
+ return;
+ }
}
- }
/* other address */
if (m_device->NeedsArp ())
- {
- NS_LOG_LOGIC ("Needs ARP" << " " << dest);
- Ptr<Icmpv6L4Protocol> icmpv6 = ipv6->GetIcmpv6 ();
- Address hardwareDestination;
- bool found = false;
+ {
+ NS_LOG_LOGIC ("Needs ARP" << " " << dest);
+ Ptr<Icmpv6L4Protocol> icmpv6 = ipv6->GetIcmpv6 ();
+ Address hardwareDestination;
+ bool found = false;
+
+ NS_ASSERT (icmpv6);
+
+ if (dest.IsMulticast ())
+ {
+ NS_LOG_LOGIC ("IsMulticast");
+ NS_ASSERT_MSG (m_device->IsMulticast (), "Ipv6Interface::SendTo (): Sending multicast packet over non-multicast device");
- NS_ASSERT (icmpv6);
-
- if (dest.IsMulticast ())
- {
- NS_LOG_LOGIC ("IsMulticast");
- NS_ASSERT_MSG (m_device->IsMulticast (), "Ipv6Interface::SendTo (): Sending multicast packet over non-multicast device");
+ hardwareDestination = m_device->GetMulticast (dest);
+ found = true;
+ }
+ else
+ {
+ NS_LOG_LOGIC ("NDISC Lookup");
+ found = icmpv6->Lookup (p, dest, GetDevice (), m_ndCache, &hardwareDestination);
+ }
- hardwareDestination = m_device->GetMulticast (dest);
- found = true;
+ if (found)
+ {
+ NS_LOG_LOGIC ("Address Resolved. Send.");
+ m_device ->Send (p, hardwareDestination, Ipv6L3Protocol::PROT_NUMBER);
+ }
}
- else
- {
- NS_LOG_LOGIC ("NDISC Lookup");
- found = icmpv6->Lookup (p, dest, GetDevice (), m_ndCache, &hardwareDestination);
- }
-
- if (found)
+ else
{
- NS_LOG_LOGIC ("Address Resolved. Send.");
- m_device ->Send (p, hardwareDestination, Ipv6L3Protocol::PROT_NUMBER);
+ NS_LOG_LOGIC ("Doesn't need ARP");
+ m_device->Send (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER);
}
- }
- else
- {
- NS_LOG_LOGIC ("Doesn't need ARP");
- m_device->Send (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER);
- }
}
void Ipv6Interface::SetCurHopLimit (uint8_t curHopLimit)
@@ -425,13 +425,13 @@
NS_LOG_FUNCTION (this << address << state);
for (Ipv6InterfaceAddressListI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
- {
- if ((*it).GetAddress () == address)
{
- (*it).SetState (state);
- return;
+ if ((*it).GetAddress () == address)
+ {
+ (*it).SetState (state);
+ return;
+ }
}
- }
/* not found, maybe address has expired */
}
@@ -440,13 +440,13 @@
NS_LOG_FUNCTION (this << address << uid);
for (Ipv6InterfaceAddressListI it = m_addresses.begin () ; it != m_addresses.end () ; ++it)
- {
- if ((*it).GetAddress () == address)
{
- (*it).SetNsDadUid (uid);
- return;
+ if ((*it).GetAddress () == address)
+ {
+ (*it).SetNsDadUid (uid);
+ return;
+ }
}
- }
/* not found, maybe address has expired */
}
--- a/src/internet-stack/ipv6-interface.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-interface.h Wed Dec 30 14:22:25 2009 +0100
@@ -48,271 +48,271 @@
*/
class Ipv6Interface : public Object
{
- public:
- /**
- * \brief Get the type ID
- * \return type ID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type ID
+ * \return type ID
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Constructs an Ipv6Interface.
- */
- Ipv6Interface ();
+ /**
+ * \brief Constructs an Ipv6Interface.
+ */
+ Ipv6Interface ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6Interface ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6Interface ();
- /**
- * \brief Set node associated with interface.
- * \param node node
- */
- void SetNode (Ptr<Node> node);
+ /**
+ * \brief Set node associated with interface.
+ * \param node node
+ */
+ void SetNode (Ptr<Node> node);
- /**
- * \brief Set the NetDevice.
- * \param device NetDevice
- */
- void SetDevice (Ptr<NetDevice> device);
+ /**
+ * \brief Set the NetDevice.
+ * \param device NetDevice
+ */
+ void SetDevice (Ptr<NetDevice> device);
- /**
- * \brief Get the NetDevice.
- * \return the NetDevice associated with this interface
- */
- virtual Ptr<NetDevice> GetDevice () const;
+ /**
+ * \brief Get the NetDevice.
+ * \return the NetDevice associated with this interface
+ */
+ virtual Ptr<NetDevice> GetDevice () const;
- /**
- * \brief Set the metric.
- * \param metric configured routing metric (cost) of this interface
- */
- void SetMetric (uint16_t metric);
+ /**
+ * \brief Set the metric.
+ * \param metric configured routing metric (cost) of this interface
+ */
+ void SetMetric (uint16_t metric);
- /**
- * \brief Get the metric
- * \return the metric
- */
- uint16_t GetMetric () const;
+ /**
+ * \brief Get the metric
+ * \return the metric
+ */
+ uint16_t GetMetric () const;
- /**
- * \brief Is the interface UP ?
- * \return true if interface is enabled, false otherwise.
- */
- bool IsUp () const;
+ /**
+ * \brief Is the interface UP ?
+ * \return true if interface is enabled, false otherwise.
+ */
+ bool IsUp () const;
- /**
- * \brief Is the interface DOWN ?
- * \return true if interface is disabled, false otherwise.
- */
- bool IsDown () const;
+ /**
+ * \brief Is the interface DOWN ?
+ * \return true if interface is disabled, false otherwise.
+ */
+ bool IsDown () const;
- /**
- * \brief Enable this interface.
- */
- void SetUp ();
+ /**
+ * \brief Enable this interface.
+ */
+ void SetUp ();
- /**
- * \brief Disable this interface.
- */
- void SetDown ();
+ /**
+ * \brief Disable this interface.
+ */
+ void SetDown ();
- /**
- * \brief If the interface allows forwarding packets.
- * \return true if forwarding is enabled, false otherwise
- */
- bool IsForwarding () const;
+ /**
+ * \brief If the interface allows forwarding packets.
+ * \return true if forwarding is enabled, false otherwise
+ */
+ bool IsForwarding () const;
- /**
- * \brief Set forwarding enabled or not.
- * \param forward forwarding state
- */
- void SetForwarding (bool forward);
+ /**
+ * \brief Set forwarding enabled or not.
+ * \param forward forwarding state
+ */
+ void SetForwarding (bool forward);
- /**
- * \brief Set the current hop limit.
- * \param curHopLimit the value to set
- */
- void SetCurHopLimit (uint8_t curHopLimit);
+ /**
+ * \brief Set the current hop limit.
+ * \param curHopLimit the value to set
+ */
+ void SetCurHopLimit (uint8_t curHopLimit);
- /**
- * \brief Get the current hop limit value.
- * \return current hop limit
- */
- uint8_t GetCurHopLimit () const;
+ /**
+ * \brief Get the current hop limit value.
+ * \return current hop limit
+ */
+ uint8_t GetCurHopLimit () const;
- /**
- * \brief Set the base reachable time.
- * \param baseReachableTime the value to set
- */
- void SetBaseReachableTime (uint16_t baseReachableTime);
+ /**
+ * \brief Set the base reachable time.
+ * \param baseReachableTime the value to set
+ */
+ void SetBaseReachableTime (uint16_t baseReachableTime);
- /**
- * \brief Get the base reachable time.
- * \return base reachable time
- */
- uint16_t GetBaseReachableTime () const;
+ /**
+ * \brief Get the base reachable time.
+ * \return base reachable time
+ */
+ uint16_t GetBaseReachableTime () const;
- /**
- * \brief Set the reachable time.
- * \param reachableTime value to set
- */
- void SetReachableTime (uint16_t reachableTime);
+ /**
+ * \brief Set the reachable time.
+ * \param reachableTime value to set
+ */
+ void SetReachableTime (uint16_t reachableTime);
- /**
- * \brief Get the reachable time.
- * \return reachable time
- */
- uint16_t GetReachableTime () const;
+ /**
+ * \brief Get the reachable time.
+ * \return reachable time
+ */
+ uint16_t GetReachableTime () const;
- /**
- * \brief Set the retransmission timer.
- * \param retransTimer value to set
- */
- void SetRetransTimer (uint16_t retransTimer);
+ /**
+ * \brief Set the retransmission timer.
+ * \param retransTimer value to set
+ */
+ void SetRetransTimer (uint16_t retransTimer);
- /**
- * \brief Get the retransmission timer.
- * \return retransmission timer
- */
- uint16_t GetRetransTimer () const;
+ /**
+ * \brief Get the retransmission timer.
+ * \return retransmission timer
+ */
+ uint16_t GetRetransTimer () const;
- /**
- * \brief Send a packet through this interface.
- * \param p packet to send
- * \param dest next hop address of packet.
- *
- * \note This method will eventually call the private SendTo
- * method which must be implemented by subclasses.
- */
- void Send (Ptr<Packet> p, Ipv6Address dest);
+ /**
+ * \brief Send a packet through this interface.
+ * \param p packet to send
+ * \param dest next hop address of packet.
+ *
+ * \note This method will eventually call the private SendTo
+ * method which must be implemented by subclasses.
+ */
+ void Send (Ptr<Packet> p, Ipv6Address dest);
- /**
- * \brief Add an IPv6 address.
- * \param iface address to add
- * \return true if address was added, false otherwise
- */
- bool AddAddress (Ipv6InterfaceAddress iface);
-
- /**
- * \brief Get link-local address from IPv6 interface.
- * \return link-local Ipv6InterfaceAddress, assert if not found
- */
- Ipv6InterfaceAddress GetLinkLocalAddress () const;
+ /**
+ * \brief Add an IPv6 address.
+ * \param iface address to add
+ * \return true if address was added, false otherwise
+ */
+ bool AddAddress (Ipv6InterfaceAddress iface);
- /**
- * \brief Get an address from IPv6 interface.
- * \param index index
- * \return Ipv6InterfaceAddress address whose index is i
- */
- Ipv6InterfaceAddress GetAddress (uint32_t index) const;
+ /**
+ * \brief Get link-local address from IPv6 interface.
+ * \return link-local Ipv6InterfaceAddress, assert if not found
+ */
+ Ipv6InterfaceAddress GetLinkLocalAddress () const;
+
+ /**
+ * \brief Get an address from IPv6 interface.
+ * \param index index
+ * \return Ipv6InterfaceAddress address whose index is i
+ */
+ Ipv6InterfaceAddress GetAddress (uint32_t index) const;
- /**
- * \brief Get an address which is in the same network prefix as destination.
- * \param dst destination address
- * \return Corresponding Ipv6InterfaceAddress or assert if not found
- */
- Ipv6InterfaceAddress GetAddressMatchingDestination (Ipv6Address dst);
+ /**
+ * \brief Get an address which is in the same network prefix as destination.
+ * \param dst destination address
+ * \return Corresponding Ipv6InterfaceAddress or assert if not found
+ */
+ Ipv6InterfaceAddress GetAddressMatchingDestination (Ipv6Address dst);
+
+ /**
+ * \brief Get number of addresses on this IPv6 interface.
+ * \return number of address
+ */
+ uint32_t GetNAddresses (void) const;
- /**
- * \brief Get number of addresses on this IPv6 interface.
- * \return number of address
- */
- uint32_t GetNAddresses (void) const;
-
- /**
- * \brief Remove an address from interface.
- * \param index index to remove
- * \return Ipv6InterfaceAddress address whose index is index
- */
- Ipv6InterfaceAddress RemoveAddress (uint32_t index);
-
- /**
- * \brief Update state of an interface address.
- * \param address IPv6 address
- * \param state new state
- */
- void SetState (Ipv6Address address, Ipv6InterfaceAddress::State_e state);
+ /**
+ * \brief Remove an address from interface.
+ * \param index index to remove
+ * \return Ipv6InterfaceAddress address whose index is index
+ */
+ Ipv6InterfaceAddress RemoveAddress (uint32_t index);
- /**
- * \brief Update NS DAD packet UID of an interface address.
- * \param address IPv6 address
- * \param uid packet UID
- */
- void SetNsDadUid (Ipv6Address address, uint32_t uid);
+ /**
+ * \brief Update state of an interface address.
+ * \param address IPv6 address
+ * \param state new state
+ */
+ void SetState (Ipv6Address address, Ipv6InterfaceAddress::State_e state);
+
+ /**
+ * \brief Update NS DAD packet UID of an interface address.
+ * \param address IPv6 address
+ * \param uid packet UID
+ */
+ void SetNsDadUid (Ipv6Address address, uint32_t uid);
- protected:
- /**
- * \brief Dispose this object.
- */
- virtual void DoDispose ();
+protected:
+ /**
+ * \brief Dispose this object.
+ */
+ virtual void DoDispose ();
- private:
- typedef std::list<Ipv6InterfaceAddress> Ipv6InterfaceAddressList;
- typedef std::list<Ipv6InterfaceAddress>::iterator Ipv6InterfaceAddressListI;
- typedef std::list<Ipv6InterfaceAddress>::const_iterator Ipv6InterfaceAddressListCI;
+private:
+ typedef std::list<Ipv6InterfaceAddress> Ipv6InterfaceAddressList;
+ typedef std::list<Ipv6InterfaceAddress>::iterator Ipv6InterfaceAddressListI;
+ typedef std::list<Ipv6InterfaceAddress>::const_iterator Ipv6InterfaceAddressListCI;
- /**
- * \brief Initialize interface.
- */
- void DoSetup ();
+ /**
+ * \brief Initialize interface.
+ */
+ void DoSetup ();
- /**
- * \brief The addresses assigned to this interface.
- */
- Ipv6InterfaceAddressList m_addresses;
+ /**
+ * \brief The addresses assigned to this interface.
+ */
+ Ipv6InterfaceAddressList m_addresses;
- /**
- * \brief The state of this interface.
- */
- bool m_ifup;
+ /**
+ * \brief The state of this interface.
+ */
+ bool m_ifup;
- /**
- * \brief Forwarding state.
- */
- bool m_forwarding;
+ /**
+ * \brief Forwarding state.
+ */
+ bool m_forwarding;
- /**
- * \brief The metric.
- */
- uint16_t m_metric;
+ /**
+ * \brief The metric.
+ */
+ uint16_t m_metric;
- /**
- * \brief Node associated with this interface.
- */
- Ptr<Node> m_node;
+ /**
+ * \brief Node associated with this interface.
+ */
+ Ptr<Node> m_node;
- /**
- * \brief NetDevice associated with this interface.
- */
- Ptr<NetDevice> m_device;
+ /**
+ * \brief NetDevice associated with this interface.
+ */
+ Ptr<NetDevice> m_device;
- /**
- * \brief Neighbor cache.
- */
- Ptr<NdiscCache> m_ndCache;
+ /**
+ * \brief Neighbor cache.
+ */
+ Ptr<NdiscCache> m_ndCache;
- /**
- * \brief Current hop limit.
- */
- uint8_t m_curHopLimit;
+ /**
+ * \brief Current hop limit.
+ */
+ uint8_t m_curHopLimit;
- /**
- * \brief Base value used for computing the random reachable time value (in millisecond).
- */
- uint16_t m_baseReachableTime;
+ /**
+ * \brief Base value used for computing the random reachable time value (in millisecond).
+ */
+ uint16_t m_baseReachableTime;
- /**
- * \brief Reachable time (in millisecond).
- * The time a neighbor is considered reachable after receiving a reachability confirmation.
- */
- uint16_t m_reachableTime;
+ /**
+ * \brief Reachable time (in millisecond).
+ * The time a neighbor is considered reachable after receiving a reachability confirmation.
+ */
+ uint16_t m_reachableTime;
- /**
- * \brief Retransmission timer (in millisecond).
- * Time between retransmission of NS.
- */
- uint16_t m_retransTimer;
+ /**
+ * \brief Retransmission timer (in millisecond).
+ * Time between retransmission of NS.
+ */
+ uint16_t m_retransTimer;
};
} /* namespace ns3 */
--- a/src/internet-stack/ipv6-l3-protocol.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-l3-protocol.cc Wed Dec 30 14:22:25 2009 +0100
@@ -65,7 +65,7 @@
MakeObjectVectorAccessor (&Ipv6L3Protocol::m_interfaces),
MakeObjectVectorChecker<Ipv6Interface> ())
.AddTraceSource ("Tx", "Send IPv6 packet to outgoing interface.",
- MakeTraceSourceAccessor (&Ipv6L3Protocol::m_txTrace))
+ MakeTraceSourceAccessor (&Ipv6L3Protocol::m_txTrace))
.AddTraceSource ("Rx", "Receive IPv6 packet from incoming interface.",
MakeTraceSourceAccessor (&Ipv6L3Protocol::m_rxTrace))
.AddTraceSource ("Drop", "Drop IPv6 packet",
@@ -88,35 +88,35 @@
void Ipv6L3Protocol::DoDispose ()
{
NS_LOG_FUNCTION_NOARGS ();
-
+
/* clear protocol and interface list */
for (L4List_t::iterator it = m_protocols.begin () ; it != m_protocols.end () ; ++it)
- {
- *it = 0;
- }
+ {
+ *it = 0;
+ }
m_protocols.clear ();
/* remove interfaces */
for (Ipv6InterfaceList::iterator it = m_interfaces.begin () ; it != m_interfaces.end (); ++it)
- {
- *it = 0;
- }
+ {
+ *it = 0;
+ }
m_interfaces.clear ();
/* remove raw sockets */
for (SocketList::iterator it = m_sockets.begin () ; it != m_sockets.end () ; ++it)
- {
- *it = 0;
- }
+ {
+ *it = 0;
+ }
m_sockets.clear ();
/* remove list of prefix */
for (Ipv6AutoconfiguredPrefixListI it = m_prefixes.begin () ; it != m_prefixes.end () ; ++it)
- {
- (*it)->StopValidTimer ();
- (*it)->StopPreferredTimer ();
- (*it) = 0;
- }
+ {
+ (*it)->StopValidTimer ();
+ (*it)->StopPreferredTimer ();
+ (*it) = 0;
+ }
m_prefixes.clear ();
m_node = 0;
@@ -142,7 +142,7 @@
NS_LOG_FUNCTION (this << device);
Ptr<Node> node = GetObject<Node> ();
Ptr<Ipv6Interface> interface = CreateObject<Ipv6Interface> ();
-
+
node->RegisterProtocolHandler (MakeCallback (&Ipv6L3Protocol::Receive, this), Ipv6L3Protocol::PROT_NUMBER, device);
interface->SetNode (m_node);
interface->SetDevice (device);
@@ -164,15 +164,15 @@
{
NS_LOG_FUNCTION (this << index);
uint32_t tmp = 0;
-
+
for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin () ; it != m_interfaces.end () ; it++)
- {
- if (index == tmp)
{
- return *it;
+ if (index == tmp)
+ {
+ return *it;
+ }
+ tmp++;
}
- tmp++;
- }
return 0;
}
@@ -188,19 +188,19 @@
int32_t index = 0;
for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin () ; it != m_interfaces.end () ; it++)
- {
- uint32_t j = 0;
- uint32_t max = (*it)->GetNAddresses ();
+ {
+ uint32_t j = 0;
+ uint32_t max = (*it)->GetNAddresses ();
- for (j = 0 ; j < max ; j++)
- {
- if ((*it)->GetAddress (j).GetAddress () == address)
- {
- return index;
- }
+ for (j = 0 ; j < max ; j++)
+ {
+ if ((*it)->GetAddress (j).GetAddress () == address)
+ {
+ return index;
+ }
+ }
+ index++;
}
- index++;
- }
return -1;
}
@@ -210,17 +210,17 @@
int32_t index = 0;
for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin () ; it != m_interfaces.end () ; it++)
- {
- uint32_t j = 0;
- for (j = 0 ; j < (*it)->GetNAddresses () ; j++)
{
- if ((*it)->GetAddress (j).GetAddress ().CombinePrefix (mask) == address.CombinePrefix (mask))
- {
- return index;
- }
+ uint32_t j = 0;
+ for (j = 0 ; j < (*it)->GetNAddresses () ; j++)
+ {
+ if ((*it)->GetAddress (j).GetAddress ().CombinePrefix (mask) == address.CombinePrefix (mask))
+ {
+ return index;
+ }
+ }
+ index++;
}
- index++;
- }
return -1;
}
@@ -236,13 +236,13 @@
int32_t index = 0;
for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin () ; it != m_interfaces.end () ; it++)
- {
- if ((*it)->GetDevice () == device)
{
- return index;
+ if ((*it)->GetDevice () == device)
+ {
+ return index;
+ }
+ index++;
}
- index++;
- }
return -1;
}
@@ -254,44 +254,44 @@
Address addr = GetInterface (interface)->GetDevice ()->GetAddress ();
if (flags & (1<< 6)) /* auto flag */
- {
- /* XXX : add other L2 address case */
- if (Mac48Address::IsMatchingType (addr))
{
- address = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), network));
- }
- else
- {
- NS_FATAL_ERROR ("Unknown method to make autoconfigured address for this kind of device.");
- return;
- }
+ /* XXX : add other L2 address case */
+ if (Mac48Address::IsMatchingType (addr))
+ {
+ address = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), network));
+ }
+ else
+ {
+ NS_FATAL_ERROR ("Unknown method to make autoconfigured address for this kind of device.");
+ return;
+ }
- /* see if we have already the prefix */
- for (Ipv6AutoconfiguredPrefixListI it = m_prefixes.begin () ; it != m_prefixes.end () ; ++it)
- {
- if ((*it)->GetInterface () == interface && (*it)->GetPrefix () == network && (*it)->GetMask () == mask)
- {
- (*it)->StopPreferredTimer ();
- (*it)->StopValidTimer ();
- (*it)->StartPreferredTimer ();
- return;
- }
+ /* see if we have already the prefix */
+ for (Ipv6AutoconfiguredPrefixListI it = m_prefixes.begin () ; it != m_prefixes.end () ; ++it)
+ {
+ if ((*it)->GetInterface () == interface && (*it)->GetPrefix () == network && (*it)->GetMask () == mask)
+ {
+ (*it)->StopPreferredTimer ();
+ (*it)->StopValidTimer ();
+ (*it)->StartPreferredTimer ();
+ return;
+ }
+ }
+
+ /* no prefix found, add autoconfigured address and the prefix */
+ NS_LOG_INFO ("Autoconfigured address is :" << address.GetAddress ());
+ AddAddress (interface, address);
+
+ /* add default router
+ * if a previous default route exists, the new ones is simply added
+ */
+ GetRoutingProtocol ()->NotifyAddRoute (Ipv6Address::GetAny (), Ipv6Prefix ((uint8_t)0), defaultRouter, interface, network);
+
+ Ptr<Ipv6AutoconfiguredPrefix> aPrefix = CreateObject<Ipv6AutoconfiguredPrefix> (m_node, interface, network, mask, preferredTime, validTime, defaultRouter);
+ aPrefix->StartPreferredTimer ();
+
+ m_prefixes.push_back (aPrefix);
}
-
- /* no prefix found, add autoconfigured address and the prefix */
- NS_LOG_INFO ("Autoconfigured address is :" << address.GetAddress ());
- AddAddress (interface, address);
-
- /* add default router
- * if a previous default route exists, the new ones is simply added
- */
- GetRoutingProtocol ()->NotifyAddRoute (Ipv6Address::GetAny (), Ipv6Prefix ((uint8_t)0), defaultRouter, interface, network);
-
- Ptr<Ipv6AutoconfiguredPrefix> aPrefix = CreateObject<Ipv6AutoconfiguredPrefix> (m_node, interface, network, mask, preferredTime, validTime, defaultRouter);
- aPrefix->StartPreferredTimer ();
-
- m_prefixes.push_back (aPrefix);
- }
}
void Ipv6L3Protocol::RemoveAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, Ipv6Address defaultRouter)
@@ -304,24 +304,24 @@
Ipv6Address toFound = Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), network);
for (i = 0 ; i < max ; i++)
- {
- if (iface->GetAddress (i).GetAddress () == toFound)
{
- RemoveAddress (interface, i);
- break;
+ if (iface->GetAddress (i).GetAddress () == toFound)
+ {
+ RemoveAddress (interface, i);
+ break;
+ }
}
- }
/* remove from list of autoconfigured address */
for (Ipv6AutoconfiguredPrefixListI it = m_prefixes.begin () ; it != m_prefixes.end () ; ++it)
- {
- if ((*it)->GetInterface () == interface && (*it)->GetPrefix () == network && (*it)->GetMask () == mask)
{
- *it = 0;
- m_prefixes.erase (it);
- break;
+ if ((*it)->GetInterface () == interface && (*it)->GetPrefix () == network && (*it)->GetMask () == mask)
+ {
+ *it = 0;
+ m_prefixes.erase (it);
+ break;
+ }
}
- }
GetRoutingProtocol ()->NotifyRemoveRoute (Ipv6Address::GetAny (), Ipv6Prefix ((uint8_t)0), defaultRouter, interface, network);
}
@@ -333,9 +333,9 @@
bool ret = interface->AddAddress (address);
if (m_routingProtocol != 0)
- {
- m_routingProtocol->NotifyAddAddress (i, address);
- }
+ {
+ m_routingProtocol->NotifyAddAddress (i, address);
+ }
return ret;
}
@@ -358,15 +358,15 @@
NS_LOG_FUNCTION (this << i << addressIndex);
Ptr<Ipv6Interface> interface = GetInterface (i);
Ipv6InterfaceAddress address = interface->RemoveAddress (addressIndex);
-
+
if (address != Ipv6InterfaceAddress ())
- {
- if (m_routingProtocol != 0)
{
- m_routingProtocol->NotifyRemoveAddress (i, address);
+ if (m_routingProtocol != 0)
+ {
+ m_routingProtocol->NotifyRemoveAddress (i, address);
+ }
+ return true;
}
- return true;
- }
return false;
}
@@ -402,26 +402,26 @@
{
NS_LOG_FUNCTION (this << i);
Ptr<Ipv6Interface> interface = GetInterface (i);
-
+
interface->SetUp ();
-
+
if (m_routingProtocol != 0)
- {
- m_routingProtocol->NotifyInterfaceUp (i);
- }
+ {
+ m_routingProtocol->NotifyInterfaceUp (i);
+ }
}
void Ipv6L3Protocol::SetDown (uint32_t i)
{
NS_LOG_FUNCTION (this << i);
Ptr<Ipv6Interface> interface = GetInterface (i);
-
+
interface->SetDown ();
-
+
if (m_routingProtocol != 0)
- {
- m_routingProtocol->NotifyInterfaceDown (i);
- }
+ {
+ m_routingProtocol->NotifyInterfaceDown (i);
+ }
}
void Ipv6L3Protocol::SetupLoopback ()
@@ -433,18 +433,18 @@
/* see if we have already an loopback NetDevice */
for (i = 0 ; i < m_node->GetNDevices () ; i++)
- {
- if (device = DynamicCast<LoopbackNetDevice> (m_node->GetDevice (i)))
{
- break;
+ if (device = DynamicCast<LoopbackNetDevice> (m_node->GetDevice (i)))
+ {
+ break;
+ }
}
- }
if (device == 0)
- {
- device = CreateObject<LoopbackNetDevice> ();
- m_node->AddDevice (device);
- }
+ {
+ device = CreateObject<LoopbackNetDevice> ();
+ m_node->AddDevice (device);
+ }
interface->SetDevice (device);
interface->SetNode (m_node);
@@ -454,11 +454,11 @@
Ptr<Node> node = GetObject<Node> ();
node->RegisterProtocolHandler (MakeCallback (&Ipv6L3Protocol::Receive, this), Ipv6L3Protocol::PROT_NUMBER, device);
interface->SetUp ();
-
+
if (m_routingProtocol != 0)
- {
- m_routingProtocol->NotifyInterfaceUp (index);
- }
+ {
+ m_routingProtocol->NotifyInterfaceUp (index);
+ }
}
bool Ipv6L3Protocol::IsForwarding (uint32_t i) const
@@ -483,9 +483,9 @@
m_ipForward = forward;
for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin () ; it != m_interfaces.end (); it++)
- {
- (*it)->SetForwarding (forward);
- }
+ {
+ (*it)->SetForwarding (forward);
+ }
}
bool Ipv6L3Protocol::GetIpForward () const
@@ -499,15 +499,15 @@
NS_LOG_FUNCTION_NOARGS ();
if (m_node == 0)
- {
- Ptr<Node> node = this->GetObject<Node> ();
- // verify that it's a valid node and that
- // the node has not been set before
- if (node != 0)
{
- this->SetNode (node);
+ Ptr<Node> node = this->GetObject<Node> ();
+ // verify that it's a valid node and that
+ // the node has not been set before
+ if (node != 0)
+ {
+ this->SetNode (node);
+ }
}
- }
Object::NotifyNewAggregate ();
}
@@ -536,12 +536,12 @@
NS_LOG_FUNCTION (this << protocolNumber);
for (L4List_t::const_iterator i = m_protocols.begin () ; i != m_protocols.end () ; ++i)
- {
- if ((*i)->GetProtocolNumber () == protocolNumber)
{
- return *i;
+ if ((*i)->GetProtocolNumber () == protocolNumber)
+ {
+ return *i;
+ }
}
- }
return 0;
}
@@ -557,30 +557,30 @@
void Ipv6L3Protocol::DeleteRawSocket (Ptr<Socket> socket)
{
NS_LOG_FUNCTION (this << socket);
-
+
for (SocketList::iterator it = m_sockets.begin () ; it != m_sockets.end () ; ++it)
- {
- if ((*it) == socket)
{
- m_sockets.erase (it);
- return;
+ if ((*it) == socket)
+ {
+ m_sockets.erase (it);
+ return;
+ }
}
- }
}
Ptr<Icmpv6L4Protocol> Ipv6L3Protocol::GetIcmpv6 () const
{
NS_LOG_FUNCTION_NOARGS ();
Ptr<Ipv6L4Protocol> protocol = GetProtocol (Icmpv6L4Protocol::GetStaticProtocolNumber ());
-
+
if (protocol)
- {
- return protocol->GetObject<Icmpv6L4Protocol> ();
- }
+ {
+ return protocol->GetObject<Icmpv6L4Protocol> ();
+ }
else
- {
- return 0;
- }
+ {
+ return 0;
+ }
}
void Ipv6L3Protocol::SetDefaultTtl (uint8_t ttl)
@@ -596,11 +596,11 @@
uint8_t ttl = m_defaultTtl;
SocketIpTtlTag tag;
bool found = packet->RemovePacketTag (tag);
-
+
if (found)
- {
- ttl = tag.GetTtl ();
- }
+ {
+ ttl = tag.GetTtl ();
+ }
/* Handle 3 cases:
* 1) Packet is passed in with a route entry
@@ -610,22 +610,22 @@
/* 1) */
if (route && route->GetGateway () != Ipv6Address::GetZero ())
- {
- NS_LOG_LOGIC ("Ipv6L3Protocol::Send case 1: passed in with a route");
- hdr = BuildHeader (source, destination, protocol, packet->GetSize (), ttl);
- SendRealOut (route, packet, hdr);
- return;
- }
-
+ {
+ NS_LOG_LOGIC ("Ipv6L3Protocol::Send case 1: passed in with a route");
+ hdr = BuildHeader (source, destination, protocol, packet->GetSize (), ttl);
+ SendRealOut (route, packet, hdr);
+ return;
+ }
+
/* 2) */
if (route && route->GetGateway () == Ipv6Address::GetZero ())
- {
- NS_LOG_LOGIC ("Ipv6L3Protocol::Send case 1: probably sent to machine on same IPv6 network");
- /* NS_FATAL_ERROR ("This case is not yet implemented"); */
- hdr = BuildHeader (source, destination, protocol, packet->GetSize (), ttl);
- SendRealOut (route, packet, hdr);
- return;
- }
+ {
+ NS_LOG_LOGIC ("Ipv6L3Protocol::Send case 1: probably sent to machine on same IPv6 network");
+ /* NS_FATAL_ERROR ("This case is not yet implemented"); */
+ hdr = BuildHeader (source, destination, protocol, packet->GetSize (), ttl);
+ SendRealOut (route, packet, hdr);
+ return;
+ }
/* 3) */
NS_LOG_LOGIC ("Ipv6L3Protocol::Send case 3: passed in with no route " << destination);
@@ -642,23 +642,23 @@
destination.IsAllRoutersMulticast() ||
destination.IsAllHostsMulticast() ||
destination.IsSolicitedMulticast())
- {
- int32_t index = GetInterfaceForAddress (source);
- NS_ASSERT (index >= 0);
- oif = GetNetDevice(index);
- }
+ {
+ int32_t index = GetInterfaceForAddress (source);
+ NS_ASSERT (index >= 0);
+ oif = GetNetDevice(index);
+ }
newRoute = m_routingProtocol->RouteOutput (packet, hdr, oif, err);
if (newRoute)
- {
- SendRealOut (newRoute, packet, hdr);
- }
+ {
+ SendRealOut (newRoute, packet, hdr);
+ }
else
- {
- NS_LOG_WARN ("No route to host, drop!");
- m_dropTrace (hdr, packet, DROP_NO_ROUTE, GetInterfaceForDevice(oif));
- }
+ {
+ NS_LOG_WARN ("No route to host, drop!");
+ m_dropTrace (hdr, packet, DROP_NO_ROUTE, GetInterfaceForDevice(oif));
+ }
}
void Ipv6L3Protocol::Receive (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType)
@@ -668,39 +668,39 @@
uint32_t interface = 0;
Ptr<Packet> packet = p->Copy ();
Ptr<Ipv6Interface> ipv6Interface = 0;
-
+
for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin () ; it != m_interfaces.end () ; it++)
- {
- ipv6Interface = *it;
-
- if (ipv6Interface->GetDevice () == device)
{
- if (ipv6Interface->IsUp ())
- {
- m_rxTrace (packet, interface);
- break;
- }
- else
- {
- NS_LOG_LOGIC ("Dropping received packet-- interface is down");
- Ipv6Header hdr;
- packet->RemoveHeader (hdr);
- m_dropTrace (hdr, packet, DROP_INTERFACE_DOWN, interface);
- return;
- }
+ ipv6Interface = *it;
+
+ if (ipv6Interface->GetDevice () == device)
+ {
+ if (ipv6Interface->IsUp ())
+ {
+ m_rxTrace (packet, interface);
+ break;
+ }
+ else
+ {
+ NS_LOG_LOGIC ("Dropping received packet-- interface is down");
+ Ipv6Header hdr;
+ packet->RemoveHeader (hdr);
+ m_dropTrace (hdr, packet, DROP_INTERFACE_DOWN, interface);
+ return;
+ }
+ }
+ interface++;
}
- interface++;
- }
Ipv6Header hdr;
packet->RemoveHeader (hdr);
/* forward up to IPv6 raw sockets */
for (SocketList::iterator it = m_sockets.begin () ; it != m_sockets.end () ; ++it)
- {
- Ptr<Ipv6RawSocketImpl> socket = *it;
- socket->ForwardUp (packet, hdr, device);
- }
+ {
+ Ptr<Ipv6RawSocketImpl> socket = *it;
+ socket->ForwardUp (packet, hdr, device);
+ }
Ptr<Ipv6ExtensionDemux> ipv6ExtensionDemux = m_node->GetObject<Ipv6ExtensionDemux>();
Ptr<Ipv6Extension> ipv6Extension = 0;
@@ -708,25 +708,25 @@
bool isDropped = false;
if (nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
- {
- ipv6Extension = ipv6ExtensionDemux->GetExtension (nextHeader);
+ {
+ ipv6Extension = ipv6ExtensionDemux->GetExtension (nextHeader);
- if (ipv6Extension)
- {
- ipv6Extension->Process (packet, 0, hdr, hdr.GetDestinationAddress (), (uint8_t *)0, isDropped);
+ if (ipv6Extension)
+ {
+ ipv6Extension->Process (packet, 0, hdr, hdr.GetDestinationAddress (), (uint8_t *)0, isDropped);
+ }
+
+ if (isDropped)
+ {
+ return;
+ }
}
- if (isDropped)
- {
- return;
- }
- }
-
m_routingProtocol->RouteInput (packet, hdr, device,
- MakeCallback (&Ipv6L3Protocol::IpForward, this),
- MakeCallback (&Ipv6L3Protocol::IpMulticastForward, this),
- MakeCallback (&Ipv6L3Protocol::LocalDeliver, this),
- MakeCallback (&Ipv6L3Protocol::RouteInputError, this)
+ MakeCallback (&Ipv6L3Protocol::IpForward, this),
+ MakeCallback (&Ipv6L3Protocol::IpMulticastForward, this),
+ MakeCallback (&Ipv6L3Protocol::LocalDeliver, this),
+ MakeCallback (&Ipv6L3Protocol::RouteInputError, this)
);
}
@@ -735,15 +735,15 @@
NS_LOG_FUNCTION (this << route << packet << ipHeader);
if (!route)
- {
- NS_LOG_LOGIC ("No route to host, drop!.");
- return;
- }
+ {
+ NS_LOG_LOGIC ("No route to host, drop!.");
+ return;
+ }
Ptr<NetDevice> dev = route->GetOutputDevice ();
int32_t interface = GetInterfaceForDevice (dev);
NS_ASSERT (interface >= 0);
-
+
Ptr<Ipv6Interface> outInterface = GetInterface (interface);
NS_LOG_LOGIC ("Send via NetDevice ifIndex " << dev->GetIfIndex () << " Ipv6InterfaceIndex " << interface);
@@ -751,113 +751,113 @@
std::list<Ptr<Packet> > fragments;
if (packet->GetSize () > (size_t)(dev->GetMtu () + 40)) /* 40 => size of IPv6 header */
- {
- // Router => drop
- if (m_ipForward)
{
- return;
- }
+ // Router => drop
+ if (m_ipForward)
+ {
+ return;
+ }
- Ptr<Ipv6ExtensionDemux> ipv6ExtensionDemux = m_node->GetObject<Ipv6ExtensionDemux> ();
+ Ptr<Ipv6ExtensionDemux> ipv6ExtensionDemux = m_node->GetObject<Ipv6ExtensionDemux> ();
- packet->AddHeader (ipHeader);
+ packet->AddHeader (ipHeader);
- // To get specific method GetFragments from Ipv6ExtensionFragmentation
- Ipv6ExtensionFragment *ipv6Fragment = dynamic_cast<Ipv6ExtensionFragment *>(PeekPointer (ipv6ExtensionDemux->GetExtension (Ipv6Header::IPV6_EXT_FRAGMENTATION)));
- ipv6Fragment->GetFragments (packet, outInterface->GetDevice ()->GetMtu (), fragments);
- }
+ // To get specific method GetFragments from Ipv6ExtensionFragmentation
+ Ipv6ExtensionFragment *ipv6Fragment = dynamic_cast<Ipv6ExtensionFragment *>(PeekPointer (ipv6ExtensionDemux->GetExtension (Ipv6Header::IPV6_EXT_FRAGMENTATION)));
+ ipv6Fragment->GetFragments (packet, outInterface->GetDevice ()->GetMtu (), fragments);
+ }
if (!route->GetGateway ().IsEqual (Ipv6Address::GetAny ()))
- {
- if (outInterface->IsUp ())
{
- NS_LOG_LOGIC ("Send to gateway " << route->GetGateway ());
+ if (outInterface->IsUp ())
+ {
+ NS_LOG_LOGIC ("Send to gateway " << route->GetGateway ());
+
+ if (fragments.size () != 0)
+ {
+ std::ostringstream oss;
- if (fragments.size () != 0)
- {
- std::ostringstream oss;
-
- /* IPv6 header is already added in fragments */
- for (std::list<Ptr<Packet> >::const_iterator it = fragments.begin (); it != fragments.end (); it++)
- {
- m_txTrace (*it, interface);
- outInterface->Send (*it, route->GetGateway ());
+ /* IPv6 header is already added in fragments */
+ for (std::list<Ptr<Packet> >::const_iterator it = fragments.begin (); it != fragments.end (); it++)
+ {
+ m_txTrace (*it, interface);
+ outInterface->Send (*it, route->GetGateway ());
+ }
+ }
+ else
+ {
+ packet->AddHeader (ipHeader);
+ m_txTrace (packet, interface);
+ outInterface->Send (packet, route->GetGateway ());
+ }
}
- }
else
- {
- packet->AddHeader (ipHeader);
- m_txTrace (packet, interface);
- outInterface->Send (packet, route->GetGateway ());
- }
+ {
+ NS_LOG_LOGIC ("Dropping-- outgoing interface is down: " << route->GetGateway ());
+ m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, interface);
+ }
}
- else
- {
- NS_LOG_LOGIC ("Dropping-- outgoing interface is down: " << route->GetGateway ());
- m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, interface);
- }
- }
else
- {
- if (outInterface->IsUp ())
{
- NS_LOG_LOGIC ("Send to destination " << ipHeader.GetDestinationAddress ());
+ if (outInterface->IsUp ())
+ {
+ NS_LOG_LOGIC ("Send to destination " << ipHeader.GetDestinationAddress ());
+
+ if (fragments.size () != 0)
+ {
+ std::ostringstream oss;
- if (fragments.size () != 0)
- {
- std::ostringstream oss;
-
- /* IPv6 header is already added in fragments */
- for (std::list<Ptr<Packet> >::const_iterator it = fragments.begin (); it != fragments.end (); it++)
- {
- m_txTrace (*it, interface);
- outInterface->Send (*it, ipHeader.GetDestinationAddress ());
+ /* IPv6 header is already added in fragments */
+ for (std::list<Ptr<Packet> >::const_iterator it = fragments.begin (); it != fragments.end (); it++)
+ {
+ m_txTrace (*it, interface);
+ outInterface->Send (*it, ipHeader.GetDestinationAddress ());
+ }
+ }
+ else
+ {
+ packet->AddHeader (ipHeader);
+ m_txTrace (packet, interface);
+ outInterface->Send (packet, ipHeader.GetDestinationAddress ());
+ }
}
- }
else
- {
- packet->AddHeader (ipHeader);
- m_txTrace (packet, interface);
- outInterface->Send (packet, ipHeader.GetDestinationAddress ());
- }
+ {
+ NS_LOG_LOGIC ("Dropping-- outgoing interface is down: " << ipHeader.GetDestinationAddress ());
+ m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, interface);
+ }
}
- else
- {
- NS_LOG_LOGIC ("Dropping-- outgoing interface is down: " << ipHeader.GetDestinationAddress ());
- m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, interface);
- }
- }
}
void Ipv6L3Protocol::IpForward (Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header)
{
NS_LOG_FUNCTION (this << rtentry << p << header);
NS_LOG_LOGIC ("Forwarding logic for node: " << m_node->GetId ());
-
+
// Forwarding
Ipv6Header ipHeader = header;
Ptr<Packet> packet = p->Copy ();
ipHeader.SetHopLimit (ipHeader.GetHopLimit () - 1);
if (ipHeader.GetSourceAddress ().IsLinkLocal ())
- {
- /* no forward for link-local address */
- return;
- }
-
+ {
+ /* no forward for link-local address */
+ return;
+ }
+
if (ipHeader.GetHopLimit () == 0)
- {
- NS_LOG_WARN ("TTL exceeded. Drop.");
- m_dropTrace (ipHeader, packet, DROP_TTL_EXPIRED, 0);
- // Do not reply to ICMPv6 or to multicast IPv6 address
- if (ipHeader.GetNextHeader () != Icmpv6L4Protocol::PROT_NUMBER &&
- ipHeader.GetDestinationAddress ().IsMulticast () == false)
{
- packet->AddHeader (ipHeader);
- GetIcmpv6 ()->SendErrorTimeExceeded (packet, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_HOPLIMIT);
+ NS_LOG_WARN ("TTL exceeded. Drop.");
+ m_dropTrace (ipHeader, packet, DROP_TTL_EXPIRED, 0);
+ // Do not reply to ICMPv6 or to multicast IPv6 address
+ if (ipHeader.GetNextHeader () != Icmpv6L4Protocol::PROT_NUMBER &&
+ ipHeader.GetDestinationAddress ().IsMulticast () == false)
+ {
+ packet->AddHeader (ipHeader);
+ GetIcmpv6 ()->SendErrorTimeExceeded (packet, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_HOPLIMIT);
+ }
+ return;
}
- return;
- }
/* ICMPv6 Redirect */
@@ -867,32 +867,32 @@
*/
if ((!rtentry->GetGateway ().IsAny () && rtentry->GetGateway ().CombinePrefix (Ipv6Prefix (64)) == header.GetSourceAddress ().CombinePrefix (Ipv6Prefix (64))) ||
(rtentry->GetDestination ().CombinePrefix (Ipv6Prefix (64)) == header.GetSourceAddress ().CombinePrefix (Ipv6Prefix (64))))
- {
- NS_LOG_LOGIC ("ICMPv6 redirect!");
- Ptr<Icmpv6L4Protocol> icmpv6 = GetIcmpv6 ();
- Address hardwareTarget;
- Ipv6Address dst = header.GetDestinationAddress ();
- Ipv6Address src = header.GetSourceAddress ();
- Ipv6Address target = rtentry->GetGateway ();
- Ptr<Packet> copy = p->Copy ();
+ {
+ NS_LOG_LOGIC ("ICMPv6 redirect!");
+ Ptr<Icmpv6L4Protocol> icmpv6 = GetIcmpv6 ();
+ Address hardwareTarget;
+ Ipv6Address dst = header.GetDestinationAddress ();
+ Ipv6Address src = header.GetSourceAddress ();
+ Ipv6Address target = rtentry->GetGateway ();
+ Ptr<Packet> copy = p->Copy ();
- if (target.IsAny ())
- {
- target = dst;
+ if (target.IsAny ())
+ {
+ target = dst;
+ }
+
+ copy->AddHeader (header);
+
+ if (icmpv6->Lookup (target, rtentry->GetOutputDevice (), 0, &hardwareTarget))
+ {
+ icmpv6->SendRedirection (copy, src, target, dst, hardwareTarget);
+ }
+ else
+ {
+ icmpv6->SendRedirection (copy, src, target, dst, Address ());
+ }
}
- copy->AddHeader (header);
-
- if (icmpv6->Lookup (target, rtentry->GetOutputDevice (), 0, &hardwareTarget))
- {
- icmpv6->SendRedirection (copy, src, target, dst, hardwareTarget);
- }
- else
- {
- icmpv6->SendRedirection (copy, src, target, dst, Address ());
- }
- }
-
SendRealOut (rtentry, packet, ipHeader);
}
@@ -904,29 +904,29 @@
// The output interfaces we could forward this onto are encoded
// in the OutputTtl of the Ipv6MulticastRoute
for (uint32_t i = 0 ; i < Ipv6MulticastRoute::MAX_INTERFACES ; i++)
- {
- if (mrtentry->GetOutputTtl (i) < Ipv6MulticastRoute::MAX_TTL)
{
- Ptr<Packet> packet = p->Copy ();
- Ipv6Header h = header;
- h.SetHopLimit (header.GetHopLimit () - 1);
- if (h.GetHopLimit () == 0)
- {
- NS_LOG_WARN ("TTL exceeded. Drop.");
- m_dropTrace (header, packet, DROP_TTL_EXPIRED, i);
- return;
- }
+ if (mrtentry->GetOutputTtl (i) < Ipv6MulticastRoute::MAX_TTL)
+ {
+ Ptr<Packet> packet = p->Copy ();
+ Ipv6Header h = header;
+ h.SetHopLimit (header.GetHopLimit () - 1);
+ if (h.GetHopLimit () == 0)
+ {
+ NS_LOG_WARN ("TTL exceeded. Drop.");
+ m_dropTrace (header, packet, DROP_TTL_EXPIRED, i);
+ return;
+ }
- NS_LOG_LOGIC ("Forward multicast via interface " << i);
- Ptr<Ipv6Route> rtentry = Create<Ipv6Route> ();
- rtentry->SetSource (h.GetSourceAddress ());
- rtentry->SetDestination (h.GetDestinationAddress ());
- rtentry->SetGateway (Ipv6Address::GetAny ());
- rtentry->SetOutputDevice (GetNetDevice (i));
- SendRealOut (rtentry, packet, h);
- return;
+ NS_LOG_LOGIC ("Forward multicast via interface " << i);
+ Ptr<Ipv6Route> rtentry = Create<Ipv6Route> ();
+ rtentry->SetSource (h.GetSourceAddress ());
+ rtentry->SetDestination (h.GetDestinationAddress ());
+ rtentry->SetGateway (Ipv6Address::GetAny ());
+ rtentry->SetOutputDevice (GetNetDevice (i));
+ SendRealOut (rtentry, packet, h);
+ return;
+ }
}
- }
}
void Ipv6L3Protocol::LocalDeliver (Ptr<const Packet> packet, Ipv6Header const& ip, uint32_t iif)
@@ -944,76 +944,76 @@
/* process hop-by-hop extension first if exists */
if (nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
- {
- const uint8_t *buff = p->PeekData ();
+ {
+ const uint8_t *buff = p->PeekData ();
- nextHeader = *buff;
- nextHeaderPosition = *(buff + 1);
- }
+ nextHeader = *buff;
+ nextHeaderPosition = *(buff + 1);
+ }
/* process all the extensions found and the layer 4 protocol */
do {
- /* it return 0 for non-extension (i.e. layer 4 protocol) */
- ipv6Extension = ipv6ExtensionDemux->GetExtension (nextHeader);
-
- if (ipv6Extension)
- {
- nextHeaderPosition += ipv6Extension->Process (p, nextHeaderPosition, ip, dst, &nextHeader, isDropped);
+ /* it return 0 for non-extension (i.e. layer 4 protocol) */
+ ipv6Extension = ipv6ExtensionDemux->GetExtension (nextHeader);
- if (isDropped)
- {
- return;
- }
- }
- else
- {
- protocol = GetProtocol (nextHeader);
- // For ICMPv6 Error packets
- Ptr<Packet> malformedPacket = packet->Copy ();
- malformedPacket->AddHeader (ip);
+ if (ipv6Extension)
+ {
+ nextHeaderPosition += ipv6Extension->Process (p, nextHeaderPosition, ip, dst, &nextHeader, isDropped);
- if (!protocol)
- {
- NS_LOG_LOGIC ("Unknown Next Header. Drop!");
-
- if (nextHeaderPosition == 0)
- {
- GetIcmpv6 ()->SendErrorParameterError (malformedPacket, dst, Icmpv6Header::ICMPV6_UNKNOWN_NEXT_HEADER, 40);
- }
- else
- {
- GetIcmpv6 ()->SendErrorParameterError (malformedPacket, dst, Icmpv6Header::ICMPV6_UNKNOWN_NEXT_HEADER, ip.GetSerializedSize () + nextHeaderPosition);
+ if (isDropped)
+ {
+ return;
+ }
}
- m_dropTrace (ip, p, DROP_UNKNOWN_PROTOCOL, iif);
- break;
- }
else
- {
- p->RemoveAtStart (nextHeaderPosition);
- /* protocol->Receive (p, src, dst, incomingInterface); */
-
- /* L4 protocol */
- Ptr<Packet> copy = p->Copy ();
- enum Ipv6L4Protocol::RxStatus_e status = protocol->Receive (p, ip.GetSourceAddress (), ip.GetDestinationAddress (), GetInterface (iif));
-
- switch (status)
{
- case Ipv6L4Protocol::RX_OK:
- break;
- case Ipv6L4Protocol::RX_CSUM_FAILED:
- break;
- case Ipv6L4Protocol::RX_ENDPOINT_UNREACH:
- if (ip.GetDestinationAddress ().IsMulticast ())
- {
- /* do not rely on multicast address */
- break;
- }
+ protocol = GetProtocol (nextHeader);
+ // For ICMPv6 Error packets
+ Ptr<Packet> malformedPacket = packet->Copy ();
+ malformedPacket->AddHeader (ip);
+
+ if (!protocol)
+ {
+ NS_LOG_LOGIC ("Unknown Next Header. Drop!");
- copy->AddHeader (ip);
- GetIcmpv6 ()->SendErrorDestinationUnreachable (copy, ip.GetSourceAddress (), Icmpv6Header::ICMPV6_PORT_UNREACHABLE);
+ if (nextHeaderPosition == 0)
+ {
+ GetIcmpv6 ()->SendErrorParameterError (malformedPacket, dst, Icmpv6Header::ICMPV6_UNKNOWN_NEXT_HEADER, 40);
+ }
+ else
+ {
+ GetIcmpv6 ()->SendErrorParameterError (malformedPacket, dst, Icmpv6Header::ICMPV6_UNKNOWN_NEXT_HEADER, ip.GetSerializedSize () + nextHeaderPosition);
+ }
+ m_dropTrace (ip, p, DROP_UNKNOWN_PROTOCOL, iif);
+ break;
+ }
+ else
+ {
+ p->RemoveAtStart (nextHeaderPosition);
+ /* protocol->Receive (p, src, dst, incomingInterface); */
+
+ /* L4 protocol */
+ Ptr<Packet> copy = p->Copy ();
+ enum Ipv6L4Protocol::RxStatus_e status = protocol->Receive (p, ip.GetSourceAddress (), ip.GetDestinationAddress (), GetInterface (iif));
+
+ switch (status)
+ {
+ case Ipv6L4Protocol::RX_OK:
+ break;
+ case Ipv6L4Protocol::RX_CSUM_FAILED:
+ break;
+ case Ipv6L4Protocol::RX_ENDPOINT_UNREACH:
+ if (ip.GetDestinationAddress ().IsMulticast ())
+ {
+ /* do not rely on multicast address */
+ break;
+ }
+
+ copy->AddHeader (ip);
+ GetIcmpv6 ()->SendErrorDestinationUnreachable (copy, ip.GetSourceAddress (), Icmpv6Header::ICMPV6_PORT_UNREACHABLE);
+ }
+ }
}
- }
- }
} while (ipv6Extension);
}
--- a/src/internet-stack/ipv6-l3-protocol.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-l3-protocol.h Wed Dec 30 14:22:25 2009 +0100
@@ -57,461 +57,461 @@
*/
class Ipv6L3Protocol : public Ipv6
{
- public:
- /**
- * \brief Get the type ID of this class.
- * \return type ID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type ID of this class.
+ * \return type ID
+ */
+ static TypeId GetTypeId ();
+
+ /**
+ * \brief The protocol number for IPv6 (0x86DD).
+ */
+ static const uint16_t PROT_NUMBER;
- /**
- * \brief The protocol number for IPv6 (0x86DD).
- */
- static const uint16_t PROT_NUMBER;
+ /**
+ * \enum DropReason
+ * \brief Reason why a packet has been dropped.
+ */
+ enum DropReason
+ {
+ DROP_TTL_EXPIRED = 1, /**< Packet TTL has expired */
+ DROP_NO_ROUTE, /**< No route to host */
+ DROP_INTERFACE_DOWN, /**< Interface is down so can not send packet */
+ DROP_ROUTE_ERROR, /**< Route error */
+ DROP_UNKNOWN_PROTOCOL, /**< Unkown L4 protocol */
+ };
- /**
- * \enum DropReason
- * \brief Reason why a packet has been dropped.
- */
- enum DropReason
- {
- DROP_TTL_EXPIRED = 1, /**< Packet TTL has expired */
- DROP_NO_ROUTE, /**< No route to host */
- DROP_INTERFACE_DOWN, /**< Interface is down so can not send packet */
- DROP_ROUTE_ERROR, /**< Route error */
- DROP_UNKNOWN_PROTOCOL, /**< Unkown L4 protocol */
- };
-
- /**
- * \brief Constructor.
- */
- Ipv6L3Protocol ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6L3Protocol ();
+
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6L3Protocol ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6L3Protocol ();
-
- /**
- * \brief Set node for this stack.
- * \param node node to set
- */
- void SetNode (Ptr<Node> node);
+ /**
+ * \brief Set node for this stack.
+ * \param node node to set
+ */
+ void SetNode (Ptr<Node> node);
- /**
- * \brief Add an L4 protocol.
- * \param protocol L4 protocol
- */
- void Insert (Ptr<Ipv6L4Protocol> protocol);
+ /**
+ * \brief Add an L4 protocol.
+ * \param protocol L4 protocol
+ */
+ void Insert (Ptr<Ipv6L4Protocol> protocol);
- /**
- * \brief Remove an L4 protocol.
- * \param protocol L4 protocol to remove
- */
- void Remove (Ptr<Ipv6L4Protocol> protocol);
+ /**
+ * \brief Remove an L4 protocol.
+ * \param protocol L4 protocol to remove
+ */
+ void Remove (Ptr<Ipv6L4Protocol> protocol);
- /**
- * \brief Get L4 protocol by protocol number.
- * \param protocolNumber protocol number
- * \return corresponding Ipv6L4Protocol or 0 if not found
- */
- Ptr<Ipv6L4Protocol> GetProtocol (int protocolNumber) const;
+ /**
+ * \brief Get L4 protocol by protocol number.
+ * \param protocolNumber protocol number
+ * \return corresponding Ipv6L4Protocol or 0 if not found
+ */
+ Ptr<Ipv6L4Protocol> GetProtocol (int protocolNumber) const;
- /**
- * \brief Create raw IPv6 socket.
- * \return newly raw socket
- */
- Ptr<Socket> CreateRawSocket ();
+ /**
+ * \brief Create raw IPv6 socket.
+ * \return newly raw socket
+ */
+ Ptr<Socket> CreateRawSocket ();
- /**
- * \brief Remove raw IPv6 socket.
- * \param socket socket to remove
- */
- void DeleteRawSocket (Ptr<Socket> socket);
+ /**
+ * \brief Remove raw IPv6 socket.
+ * \param socket socket to remove
+ */
+ void DeleteRawSocket (Ptr<Socket> socket);
- /**
- * \brief Set the default TTL.
- * \param ttl TTL to set
- */
- void SetDefaultTtl (uint8_t ttl);
+ /**
+ * \brief Set the default TTL.
+ * \param ttl TTL to set
+ */
+ void SetDefaultTtl (uint8_t ttl);
- /**
- * \brief Receive method when a packet arrive in the stack.
- * This method removes IPv6 header and forward up to L4 protocol.
- *
- * \param device network device
- * \param p the packet
- * \param protocol next header value
- * \param from address of the correspondant
- * \param to address of the destination
- * \param packetType type of the packet
- */
- void Receive (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType);
+ /**
+ * \brief Receive method when a packet arrive in the stack.
+ * This method removes IPv6 header and forward up to L4 protocol.
+ *
+ * \param device network device
+ * \param p the packet
+ * \param protocol next header value
+ * \param from address of the correspondant
+ * \param to address of the destination
+ * \param packetType type of the packet
+ */
+ void Receive (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType);
- /**
- * \brief Higher-level layers call this method to send a packet
- * down the stack to the MAC and PHY layers.
- *
- * \param packet packet to send
- * \param source source address of packet
- * \param destination address of packet
- * \param protocol number of packet
- * \param route route to take
- */
- void Send (Ptr<Packet> packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr<Ipv6Route> route);
-
- /**
- * \brief Set routing protocol for this stack.
- * \param routingProtocol IPv6 routing protocol to set
- */
- void SetRoutingProtocol (Ptr<Ipv6RoutingProtocol> routingProtocol);
+ /**
+ * \brief Higher-level layers call this method to send a packet
+ * down the stack to the MAC and PHY layers.
+ *
+ * \param packet packet to send
+ * \param source source address of packet
+ * \param destination address of packet
+ * \param protocol number of packet
+ * \param route route to take
+ */
+ void Send (Ptr<Packet> packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr<Ipv6Route> route);
+
+ /**
+ * \brief Set routing protocol for this stack.
+ * \param routingProtocol IPv6 routing protocol to set
+ */
+ void SetRoutingProtocol (Ptr<Ipv6RoutingProtocol> routingProtocol);
- /**
- * \brief Get current routing protocol used.
- * \return routing protocol
- */
- Ptr<Ipv6RoutingProtocol> GetRoutingProtocol () const;
+ /**
+ * \brief Get current routing protocol used.
+ * \return routing protocol
+ */
+ Ptr<Ipv6RoutingProtocol> GetRoutingProtocol () const;
- /**
- * \brief Add IPv6 interface for a device.
- * \param device net device
- * \return interface index
- */
- uint32_t AddInterface (Ptr<NetDevice> device);
+ /**
+ * \brief Add IPv6 interface for a device.
+ * \param device net device
+ * \return interface index
+ */
+ uint32_t AddInterface (Ptr<NetDevice> device);
- /**
- * \brief Get an interface.
- * \param i interface index
- * \return IPv6 interface pointer
- */
- Ptr<Ipv6Interface> GetInterface (uint32_t i) const;
-
- /**
- * \brief Get current number of interface on this stack.
- * \return number of interface registered
- */
- uint32_t GetNInterfaces () const;
+ /**
+ * \brief Get an interface.
+ * \param i interface index
+ * \return IPv6 interface pointer
+ */
+ Ptr<Ipv6Interface> GetInterface (uint32_t i) const;
+
+ /**
+ * \brief Get current number of interface on this stack.
+ * \return number of interface registered
+ */
+ uint32_t GetNInterfaces () const;
- /**
- * \brief Get interface index which has specified IPv6 address
- * \param addr IPv6 address
- * \return interface index or -1 if not found
- */
- int32_t GetInterfaceForAddress (Ipv6Address addr) const;
+ /**
+ * \brief Get interface index which has specified IPv6 address
+ * \param addr IPv6 address
+ * \return interface index or -1 if not found
+ */
+ int32_t GetInterfaceForAddress (Ipv6Address addr) const;
- /**
- * \brief Get interface index which match specified address/prefix.
- * \param addr IPv6 address
- * \param mask IPv6 prefix (mask)
- * \return interface index or -1 if not found
- */
- int32_t GetInterfaceForPrefix (Ipv6Address addr, Ipv6Prefix mask) const;
+ /**
+ * \brief Get interface index which match specified address/prefix.
+ * \param addr IPv6 address
+ * \param mask IPv6 prefix (mask)
+ * \return interface index or -1 if not found
+ */
+ int32_t GetInterfaceForPrefix (Ipv6Address addr, Ipv6Prefix mask) const;
- /**
- * \brief Get interface index which is on a specified net device.
- * \param device net device
- */
- int32_t GetInterfaceForDevice (Ptr<const NetDevice> device) const;
+ /**
+ * \brief Get interface index which is on a specified net device.
+ * \param device net device
+ */
+ int32_t GetInterfaceForDevice (Ptr<const NetDevice> device) const;
- /**
- * \brief Add an address on interface.
- * \param i interface index
- * \param address to add
- */
- bool AddAddress (uint32_t i, Ipv6InterfaceAddress address);
+ /**
+ * \brief Add an address on interface.
+ * \param i interface index
+ * \param address to add
+ */
+ bool AddAddress (uint32_t i, Ipv6InterfaceAddress address);
- /**
- * \brief Get an address.
- * \param interfaceIndex interface index
- * \param addressIndex address index on the interface
- * \return Ipv6InterfaceAddress or assert if not found
- */
- Ipv6InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const;
+ /**
+ * \brief Get an address.
+ * \param interfaceIndex interface index
+ * \param addressIndex address index on the interface
+ * \return Ipv6InterfaceAddress or assert if not found
+ */
+ Ipv6InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const;
- /**
- * \brief Get number of address for an interface.
- * \param interface interface index
- * \return number of address
- */
- uint32_t GetNAddresses (uint32_t interface) const;
+ /**
+ * \brief Get number of address for an interface.
+ * \param interface interface index
+ * \return number of address
+ */
+ uint32_t GetNAddresses (uint32_t interface) const;
- /**
- * \brief Remove an address from an interface.
- * \param interfaceIndex interface index
- * \param addressIndex address index on the interface
- */
- bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
-
- /**
- * \brief Set metric for an interface.
- * \param i index
- * \param metric
- */
- void SetMetric (uint32_t i, uint16_t metric);
+ /**
+ * \brief Remove an address from an interface.
+ * \param interfaceIndex interface index
+ * \param addressIndex address index on the interface
+ */
+ bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
+
+ /**
+ * \brief Set metric for an interface.
+ * \param i index
+ * \param metric
+ */
+ void SetMetric (uint32_t i, uint16_t metric);
- /**
- * \brief Get metric for an interface.
- * \param i index
- * \return metric
- */
- uint16_t GetMetric (uint32_t i) const;
+ /**
+ * \brief Get metric for an interface.
+ * \param i index
+ * \return metric
+ */
+ uint16_t GetMetric (uint32_t i) const;
- /**
- * \brief Get MTU for an interface.
- * \param i index
- * \return MTU
- */
- uint16_t GetMtu (uint32_t i) const;
+ /**
+ * \brief Get MTU for an interface.
+ * \param i index
+ * \return MTU
+ */
+ uint16_t GetMtu (uint32_t i) const;
- /**
- * \brief Is specified interface up ?
- * \param i interface index
- */
- bool IsUp (uint32_t i) const;
+ /**
+ * \brief Is specified interface up ?
+ * \param i interface index
+ */
+ bool IsUp (uint32_t i) const;
- /**
- * \brief Set an interface up.
- * \param i interface index
- */
- void SetUp (uint32_t i);
+ /**
+ * \brief Set an interface up.
+ * \param i interface index
+ */
+ void SetUp (uint32_t i);
- /**
- * \brief set an interface down.
- * \param i interface index
- */
- void SetDown (uint32_t i);
+ /**
+ * \brief set an interface down.
+ * \param i interface index
+ */
+ void SetDown (uint32_t i);
- /**
- * \brief Is interface allows forwarding ?
- * \param i interface index
- */
- bool IsForwarding (uint32_t i) const;
+ /**
+ * \brief Is interface allows forwarding ?
+ * \param i interface index
+ */
+ bool IsForwarding (uint32_t i) const;
- /**
- * \brief Enable or disable forwarding on interface
- * \param i interface index
- * \param val true = enable forwarding, false = disable
- */
- void SetForwarding (uint32_t i, bool val);
+ /**
+ * \brief Enable or disable forwarding on interface
+ * \param i interface index
+ * \param val true = enable forwarding, false = disable
+ */
+ void SetForwarding (uint32_t i, bool val);
- /**
- * \brief Get device by index.
- * \param i device index on this stack
- * \return NetDevice pointer
- */
- Ptr<NetDevice> GetNetDevice (uint32_t i);
-
- /**
- * \brief Get ICMPv6 protocol.
- * \return Icmpv6L4Protocol pointer
- */
- Ptr<Icmpv6L4Protocol> GetIcmpv6 () const;
+ /**
+ * \brief Get device by index.
+ * \param i device index on this stack
+ * \return NetDevice pointer
+ */
+ Ptr<NetDevice> GetNetDevice (uint32_t i);
+
+ /**
+ * \brief Get ICMPv6 protocol.
+ * \return Icmpv6L4Protocol pointer
+ */
+ Ptr<Icmpv6L4Protocol> GetIcmpv6 () const;
- /**
- * \brief Add an autoconfigured address with RA information.
- * \param interface interface index
- * \param network network prefix
- * \param mask network mask
- * \param flags flags of the prefix information option (home agent, ...)
- * \param validTime valid time of the prefix
- * \param preferredTime preferred time of the prefix
- * \param defaultRouter default router address
- */
- void AddAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, Ipv6Address defaultRouter = Ipv6Address::GetZero ());
+ /**
+ * \brief Add an autoconfigured address with RA information.
+ * \param interface interface index
+ * \param network network prefix
+ * \param mask network mask
+ * \param flags flags of the prefix information option (home agent, ...)
+ * \param validTime valid time of the prefix
+ * \param preferredTime preferred time of the prefix
+ * \param defaultRouter default router address
+ */
+ void AddAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, Ipv6Address defaultRouter = Ipv6Address::GetZero ());
- /**
- * \brief Remove an autoconfigured address.
- *
- * Typically it is used when an autoconfigured address expires.
- * \param interface interface index
- * \param network network prefix
- * \param mask network mask
- * \param defaultRouter gateway
- */
- void RemoveAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, Ipv6Address defaultRouter);
+ /**
+ * \brief Remove an autoconfigured address.
+ *
+ * Typically it is used when an autoconfigured address expires.
+ * \param interface interface index
+ * \param network network prefix
+ * \param mask network mask
+ * \param defaultRouter gateway
+ */
+ void RemoveAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, Ipv6Address defaultRouter);
- /**
- * \brief Register the IPv6 Extensions.
- */
- virtual void RegisterExtensions ();
+ /**
+ * \brief Register the IPv6 Extensions.
+ */
+ virtual void RegisterExtensions ();
- /**
- * \brief Register the IPv6 Options.
- */
- virtual void RegisterOptions ();
+ /**
+ * \brief Register the IPv6 Options.
+ */
+ virtual void RegisterOptions ();
- protected:
- /**
- * \brief Dispose object.
- */
- virtual void DoDispose ();
+protected:
+ /**
+ * \brief Dispose object.
+ */
+ virtual void DoDispose ();
- /**
- * \brief Notify other components connected to the node that a new stack member is now connected.
- *
- * This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together.
- */
- virtual void NotifyNewAggregate ();
+ /**
+ * \brief Notify other components connected to the node that a new stack member is now connected.
+ *
+ * This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together.
+ */
+ virtual void NotifyNewAggregate ();
- private:
- /* for unit-tests */
- friend class Ipv6L3ProtocolTestCase;
- friend class Ipv6ExtensionLooseRouting;
+private:
+ /* for unit-tests */
+ friend class Ipv6L3ProtocolTestCase;
+ friend class Ipv6ExtensionLooseRouting;
- typedef std::list<Ptr<Ipv6Interface> > Ipv6InterfaceList;
- typedef std::list<Ptr<Ipv6RawSocketImpl> > SocketList;
- typedef std::list<Ptr<Ipv6L4Protocol> > L4List_t;
+ typedef std::list<Ptr<Ipv6Interface> > Ipv6InterfaceList;
+ typedef std::list<Ptr<Ipv6RawSocketImpl> > SocketList;
+ typedef std::list<Ptr<Ipv6L4Protocol> > L4List_t;
- typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> > Ipv6AutoconfiguredPrefixList;
- typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> >::iterator Ipv6AutoconfiguredPrefixListI;
+ typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> > Ipv6AutoconfiguredPrefixList;
+ typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> >::iterator Ipv6AutoconfiguredPrefixListI;
+
+ /**
+ * \brief Callback to trace TX (transmission) packets.
+ */
+ TracedCallback<Ptr<const Packet>, uint32_t> m_txTrace;
+
+ /**
+ * \brief Callback to trace RX (reception) packets.
+ */
+ TracedCallback<Ptr<const Packet>, uint32_t> m_rxTrace;
- /**
- * \brief Callback to trace TX (transmission) packets.
- */
- TracedCallback<Ptr<const Packet>, uint32_t> m_txTrace;
-
- /**
- * \brief Callback to trace RX (reception) packets.
- */
- TracedCallback<Ptr<const Packet>, uint32_t> m_rxTrace;
-
- /**
- * \brief Callback to trace drop packets.
- */
- TracedCallback<const Ipv6Header &, Ptr<const Packet>, DropReason, uint32_t> m_dropTrace;
+ /**
+ * \brief Callback to trace drop packets.
+ */
+ TracedCallback<const Ipv6Header &, Ptr<const Packet>, DropReason, uint32_t> m_dropTrace;
- /**
- * \brief Copy constructor.
- * \param o object to copy
- */
- Ipv6L3Protocol (const Ipv6L3Protocol& o);
-
- /**
- * \brief Copy constructor.
- * \param o object to copy
- */
- Ipv6L3Protocol &operator = (const Ipv6L3Protocol& o);
+ /**
+ * \brief Copy constructor.
+ * \param o object to copy
+ */
+ Ipv6L3Protocol (const Ipv6L3Protocol& o);
+
+ /**
+ * \brief Copy constructor.
+ * \param o object to copy
+ */
+ Ipv6L3Protocol &operator = (const Ipv6L3Protocol& o);
- /**
- * \brief Construct an IPv6 header.
- * \param src source IPv6 address
- * \param dst destination IPv6 address
- * \param protocol L4 protocol
- * \param payloadSize payload size
- * \param ttl TTL
- * \return newly created IPv6 header
- */
- Ipv6Header BuildHeader (Ipv6Address src, Ipv6Address dst, uint8_t protocol,
- uint16_t payloadSize, uint8_t ttl);
+ /**
+ * \brief Construct an IPv6 header.
+ * \param src source IPv6 address
+ * \param dst destination IPv6 address
+ * \param protocol L4 protocol
+ * \param payloadSize payload size
+ * \param ttl TTL
+ * \return newly created IPv6 header
+ */
+ Ipv6Header BuildHeader (Ipv6Address src, Ipv6Address dst, uint8_t protocol,
+ uint16_t payloadSize, uint8_t ttl);
- /**
- * \brief Send packet with route.
- * \param route route
- * \param packet packet to send
- * \param ipHeader IPv6 header to add to the packet
- */
- void SendRealOut (Ptr<Ipv6Route> route, Ptr<Packet> packet, Ipv6Header const& ipHeader);
+ /**
+ * \brief Send packet with route.
+ * \param route route
+ * \param packet packet to send
+ * \param ipHeader IPv6 header to add to the packet
+ */
+ void SendRealOut (Ptr<Ipv6Route> route, Ptr<Packet> packet, Ipv6Header const& ipHeader);
- /**
- * \brief Forward a packet.
- * \param rtentry route
- * \param p packet to forward
- * \param header IPv6 header to add to the packet
- */
- void IpForward (Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header);
+ /**
+ * \brief Forward a packet.
+ * \param rtentry route
+ * \param p packet to forward
+ * \param header IPv6 header to add to the packet
+ */
+ void IpForward (Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header);
- /**
- * \brief Forward a packet in multicast.
- * \param mrtentry route
- * \param p packet to forward
- * \param header IPv6 header to add to the packet
- */
- void IpMulticastForward (Ptr<Ipv6MulticastRoute> mrtentry, Ptr<const Packet> p, const Ipv6Header& header);
+ /**
+ * \brief Forward a packet in multicast.
+ * \param mrtentry route
+ * \param p packet to forward
+ * \param header IPv6 header to add to the packet
+ */
+ void IpMulticastForward (Ptr<Ipv6MulticastRoute> mrtentry, Ptr<const Packet> p, const Ipv6Header& header);
- /**
- * \brief Deliver a packet.
- * \param p packet delivered
- * \param ip IPv6 header
- * \param iif input interface packet was received
- */
- void LocalDeliver (Ptr<const Packet> p, Ipv6Header const& ip, uint32_t iif);
-
- /**
- * \brief Fallback when no route is found.
- * \param p packet
- * \param ipHeader IPv6 header
- * \param sockErrno error number
- */
- void RouteInputError (Ptr<const Packet> p, const Ipv6Header& ipHeader, Socket::SocketErrno sockErrno);
+ /**
+ * \brief Deliver a packet.
+ * \param p packet delivered
+ * \param ip IPv6 header
+ * \param iif input interface packet was received
+ */
+ void LocalDeliver (Ptr<const Packet> p, Ipv6Header const& ip, uint32_t iif);
- /**
- * \brief Add an IPv6 interface to the stack.
- * \param interface interface to add
- * \return index of newly added interface
- */
- uint32_t AddIpv6Interface (Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Fallback when no route is found.
+ * \param p packet
+ * \param ipHeader IPv6 header
+ * \param sockErrno error number
+ */
+ void RouteInputError (Ptr<const Packet> p, const Ipv6Header& ipHeader, Socket::SocketErrno sockErrno);
+
+ /**
+ * \brief Add an IPv6 interface to the stack.
+ * \param interface interface to add
+ * \return index of newly added interface
+ */
+ uint32_t AddIpv6Interface (Ptr<Ipv6Interface> interface);
- /**
- * \brief Setup loopback interface.
- */
- void SetupLoopback ();
+ /**
+ * \brief Setup loopback interface.
+ */
+ void SetupLoopback ();
- /**
- * \brief Set IPv6 forwarding state.
- * \param forward IPv6 forwarding enabled or not
- */
- virtual void SetIpForward (bool forward);
+ /**
+ * \brief Set IPv6 forwarding state.
+ * \param forward IPv6 forwarding enabled or not
+ */
+ virtual void SetIpForward (bool forward);
- /**
- * \brief Get IPv6 forwarding state.
- * \return forwarding state (enabled or not)
- */
- virtual bool GetIpForward () const;
+ /**
+ * \brief Get IPv6 forwarding state.
+ * \return forwarding state (enabled or not)
+ */
+ virtual bool GetIpForward () const;
- /**
- * \brief Node attached to stack.
- */
- Ptr<Node> m_node;
+ /**
+ * \brief Node attached to stack.
+ */
+ Ptr<Node> m_node;
- /**
- * \brief Forwarding packets (i.e. router mode) state.
- */
- bool m_ipForward;
+ /**
+ * \brief Forwarding packets (i.e. router mode) state.
+ */
+ bool m_ipForward;
- /**
- * \brief List of transport protocol.
- */
- L4List_t m_protocols;
+ /**
+ * \brief List of transport protocol.
+ */
+ L4List_t m_protocols;
- /**
- * \brief List of IPv6 interfaces.
- */
- Ipv6InterfaceList m_interfaces;
+ /**
+ * \brief List of IPv6 interfaces.
+ */
+ Ipv6InterfaceList m_interfaces;
- /**
- * \brief Number of IPv6 interfaces managed by the stack.
- */
- uint32_t m_nInterfaces;
+ /**
+ * \brief Number of IPv6 interfaces managed by the stack.
+ */
+ uint32_t m_nInterfaces;
- /**
- * \brief Default TTL for outgoing packets.
- */
- uint8_t m_defaultTtl;
+ /**
+ * \brief Default TTL for outgoing packets.
+ */
+ uint8_t m_defaultTtl;
- /**
- * \brief Routing protocol.
- */
- Ptr<Ipv6RoutingProtocol> m_routingProtocol;
+ /**
+ * \brief Routing protocol.
+ */
+ Ptr<Ipv6RoutingProtocol> m_routingProtocol;
- /**
- * \brief List of IPv6 raw sockets.
- */
- SocketList m_sockets;
+ /**
+ * \brief List of IPv6 raw sockets.
+ */
+ SocketList m_sockets;
- /**
- * \brief List of IPv6 prefix received from RA.
- */
- Ipv6AutoconfiguredPrefixList m_prefixes;
+ /**
+ * \brief List of IPv6 prefix received from RA.
+ */
+ Ipv6AutoconfiguredPrefixList m_prefixes;
};
} /* namespace ns3 */
--- a/src/internet-stack/ipv6-l4-protocol.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-l4-protocol.h Wed Dec 30 14:22:25 2009 +0100
@@ -37,69 +37,69 @@
*/
class Ipv6L4Protocol : public Object
{
- public:
- /**
- * \enum RxStatus_e
- * \brief Status of receive.
- */
- enum RxStatus_e
- {
- RX_OK, /**< Receive OK */
- RX_CSUM_FAILED, /**< Checksum of layer 4 protocol failed */
- RX_ENDPOINT_UNREACH /**< Destination unreachable */
- };
+public:
+ /**
+ * \enum RxStatus_e
+ * \brief Status of receive.
+ */
+ enum RxStatus_e
+ {
+ RX_OK, /**< Receive OK */
+ RX_CSUM_FAILED, /**< Checksum of layer 4 protocol failed */
+ RX_ENDPOINT_UNREACH /**< Destination unreachable */
+ };
- /**
- * \brief Get the type identifier.
- * \return type identifier
- */
- static TypeId GetTypeId (void);
+ /**
+ * \brief Get the type identifier.
+ * \return type identifier
+ */
+ static TypeId GetTypeId (void);
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6L4Protocol ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6L4Protocol ();
- /**
- * \brief Get the protocol number.
- * \return protocol number
- */
- virtual int GetProtocolNumber () const = 0;
+ /**
+ * \brief Get the protocol number.
+ * \return protocol number
+ */
+ virtual int GetProtocolNumber () const = 0;
- /**
- * \brief Receive method.
- *
- * Called from lower-level layers to send the packet up
- * in the stack.
- * \param p packet to forward up
- * \param src source address of packet received
- * \param dst address of packet received
- * \param incomingInterface the Ipv6Interface on which the packet arrived
- * \return status (OK, destination unreachable or checksum failed)
- */
- virtual enum RxStatus_e Receive (Ptr<Packet> p, Ipv6Address const &src,
- Ipv6Address const &dst,
- Ptr<Ipv6Interface> incomingInterface) = 0;
+ /**
+ * \brief Receive method.
+ *
+ * Called from lower-level layers to send the packet up
+ * in the stack.
+ * \param p packet to forward up
+ * \param src source address of packet received
+ * \param dst address of packet received
+ * \param incomingInterface the Ipv6Interface on which the packet arrived
+ * \return status (OK, destination unreachable or checksum failed)
+ */
+ virtual enum RxStatus_e Receive (Ptr<Packet> p, Ipv6Address const &src,
+ Ipv6Address const &dst,
+ Ptr<Ipv6Interface> incomingInterface) = 0;
- /**
- * \brief ICMPv6 receive method.
- * \param icmpSource the source address of the ICMPv6 message
- * \param icmpTtl the ttl of the ICMPv6 message
- * \param icmpType the 'type' field of the ICMPv6 message
- * \param icmpCode the 'code' field of the ICMPv6 message
- * \param icmpInfo extra information dependent on the ICMPv6 message
- * generated by Icmpv6L4Protocol
- * \param payloadSource the source address of the packet which triggered
- * the ICMPv6 message
- * \param payloadDestination the destination address of the packet which
- * triggered the ICMPv6 message.
- * \param payload the first 8 bytes of the UDP header of the packet
- * which triggered the ICMPv6 message.
- */
- virtual void ReceiveIcmp (Ipv6Address icmpSource, uint8_t icmpTtl,
- uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
- Ipv6Address payloadSource, Ipv6Address payloadDestination,
- const uint8_t* payload);
+ /**
+ * \brief ICMPv6 receive method.
+ * \param icmpSource the source address of the ICMPv6 message
+ * \param icmpTtl the ttl of the ICMPv6 message
+ * \param icmpType the 'type' field of the ICMPv6 message
+ * \param icmpCode the 'code' field of the ICMPv6 message
+ * \param icmpInfo extra information dependent on the ICMPv6 message
+ * generated by Icmpv6L4Protocol
+ * \param payloadSource the source address of the packet which triggered
+ * the ICMPv6 message
+ * \param payloadDestination the destination address of the packet which
+ * triggered the ICMPv6 message.
+ * \param payload the first 8 bytes of the UDP header of the packet
+ * which triggered the ICMPv6 message.
+ */
+ virtual void ReceiveIcmp (Ipv6Address icmpSource, uint8_t icmpTtl,
+ uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
+ Ipv6Address payloadSource, Ipv6Address payloadDestination,
+ const uint8_t* payload);
};
--- a/src/internet-stack/ipv6-option-header.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-option-header.cc Wed Dec 30 14:22:25 2009 +0100
@@ -45,7 +45,7 @@
}
Ipv6OptionHeader::Ipv6OptionHeader ()
-: m_type (0),
+ : m_type (0),
m_length (0)
{
}
@@ -315,7 +315,7 @@
}
Ipv6OptionRouterAlertHeader::Ipv6OptionRouterAlertHeader ()
-: m_value (0)
+ : m_value (0)
{
SetLength (2);
}
--- a/src/internet-stack/ipv6-raw-socket-impl.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-raw-socket-impl.cc Wed Dec 30 14:22:25 2009 +0100
@@ -44,15 +44,15 @@
static TypeId tid = TypeId ("ns3::Ipv6RawSocketImpl")
.SetParent<Socket> ()
.AddAttribute ("Protocol", "Protocol number to match.",
- UintegerValue (0),
- MakeUintegerAccessor (&Ipv6RawSocketImpl::m_protocol),
- MakeUintegerChecker<uint16_t> ())
+ UintegerValue (0),
+ MakeUintegerAccessor (&Ipv6RawSocketImpl::m_protocol),
+ MakeUintegerChecker<uint16_t> ())
.AddAttribute ("IcmpFilter", "Any ICMPv6 header whose type field matches a bit in this filter is dropped.",
- UintegerValue (0),
- MakeUintegerAccessor (&Ipv6RawSocketImpl::m_icmpFilter),
- MakeUintegerChecker<uint32_t> ())
+ UintegerValue (0),
+ MakeUintegerAccessor (&Ipv6RawSocketImpl::m_icmpFilter),
+ MakeUintegerChecker<uint32_t> ())
;
- return tid;
+ return tid;
}
Ipv6RawSocketImpl::Ipv6RawSocketImpl ()
@@ -100,10 +100,10 @@
NS_LOG_FUNCTION (this << address);
if (!Inet6SocketAddress::IsMatchingType (address))
- {
- m_err = Socket::ERROR_INVAL;
- return -1;
- }
+ {
+ m_err = Socket::ERROR_INVAL;
+ return -1;
+ }
Inet6SocketAddress ad = Inet6SocketAddress::ConvertFrom (address);
m_src = ad.GetIpv6 ();
return 0;
@@ -127,11 +127,11 @@
{
NS_LOG_FUNCTION_NOARGS ();
Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
-
+
if (ipv6)
- {
- ipv6->DeleteRawSocket (this);
- }
+ {
+ ipv6->DeleteRawSocket (this);
+ }
return 0;
}
@@ -152,12 +152,12 @@
int Ipv6RawSocketImpl::Connect (const Address& address)
{
NS_LOG_FUNCTION (this << address);
-
+
if (!Inet6SocketAddress::IsMatchingType (address))
- {
- m_err = Socket::ERROR_INVAL;
- return -1;
- }
+ {
+ m_err = Socket::ERROR_INVAL;
+ return -1;
+ }
Inet6SocketAddress ad = Inet6SocketAddress::ConvertFrom (address);
m_dst = ad.GetIpv6 ();
@@ -183,61 +183,61 @@
NS_LOG_FUNCTION (this << p << flags << toAddress);
if (!Inet6SocketAddress::IsMatchingType (toAddress))
- {
- m_err = Socket::ERROR_INVAL;
- return -1;
- }
+ {
+ m_err = Socket::ERROR_INVAL;
+ return -1;
+ }
if (m_shutdownSend)
- {
- return 0;
- }
+ {
+ return 0;
+ }
Inet6SocketAddress ad = Inet6SocketAddress::ConvertFrom (toAddress);
Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
Ipv6Address dst = ad.GetIpv6 ();
if (ipv6->GetRoutingProtocol ())
- {
- Ipv6Header hdr;
- hdr.SetDestinationAddress (dst);
- SocketErrno err = ERROR_NOTERROR;
- Ptr<Ipv6Route> route = 0;
- Ptr<NetDevice> oif (0); /*specify non-zero if bound to a source address */
+ {
+ Ipv6Header hdr;
+ hdr.SetDestinationAddress (dst);
+ SocketErrno err = ERROR_NOTERROR;
+ Ptr<Ipv6Route> route = 0;
+ Ptr<NetDevice> oif (0); /*specify non-zero if bound to a source address */
- if (!m_src.IsAny ())
- {
- int32_t index = ipv6->GetInterfaceForAddress (m_src);
- NS_ASSERT (index >= 0);
- oif = ipv6->GetNetDevice (index);
- }
+ if (!m_src.IsAny ())
+ {
+ int32_t index = ipv6->GetInterfaceForAddress (m_src);
+ NS_ASSERT (index >= 0);
+ oif = ipv6->GetNetDevice (index);
+ }
- route = ipv6->GetRoutingProtocol ()->RouteOutput (p, hdr, oif, err);
+ route = ipv6->GetRoutingProtocol ()->RouteOutput (p, hdr, oif, err);
- if (route)
- {
- NS_LOG_LOGIC ("Route exists");
- if (m_protocol == Icmpv6L4Protocol::GetStaticProtocolNumber ())
- {
- /* calculate checksum here for ICMPv6 echo request (sent by ping6)
- * as we cannot determine source IPv6 address at application level
- */
- if (*p->PeekData () == Icmpv6Header::ICMPV6_ECHO_REQUEST)
+ if (route)
{
- Icmpv6Echo hdr (1);
- p->RemoveHeader (hdr);
- hdr.CalculatePseudoHeaderChecksum (route->GetSource (), dst, p->GetSize () + hdr.GetSerializedSize (), Icmpv6L4Protocol::GetStaticProtocolNumber ());
- p->AddHeader (hdr);
- }
- }
+ NS_LOG_LOGIC ("Route exists");
+ if (m_protocol == Icmpv6L4Protocol::GetStaticProtocolNumber ())
+ {
+ /* calculate checksum here for ICMPv6 echo request (sent by ping6)
+ * as we cannot determine source IPv6 address at application level
+ */
+ if (*p->PeekData () == Icmpv6Header::ICMPV6_ECHO_REQUEST)
+ {
+ Icmpv6Echo hdr (1);
+ p->RemoveHeader (hdr);
+ hdr.CalculatePseudoHeaderChecksum (route->GetSource (), dst, p->GetSize () + hdr.GetSerializedSize (), Icmpv6L4Protocol::GetStaticProtocolNumber ());
+ p->AddHeader (hdr);
+ }
+ }
- ipv6->Send (p, route->GetSource (), dst, m_protocol, route);
+ ipv6->Send (p, route->GetSource (), dst, m_protocol, route);
+ }
+ else
+ {
+ NS_LOG_DEBUG ("No route, dropped!");
+ }
}
- else
- {
- NS_LOG_DEBUG ("No route, dropped!");
- }
- }
return 0;
}
@@ -251,24 +251,24 @@
Ptr<Packet> Ipv6RawSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags, Address& fromAddress)
{
NS_LOG_FUNCTION (this << maxSize << flags << fromAddress);
-
+
if (m_data.empty ())
- {
- return 0;
- }
+ {
+ return 0;
+ }
/* get packet */
struct Data data = m_data.front ();
m_data.pop_front ();
if (data.packet->GetSize () > maxSize)
- {
- Ptr<Packet> first = data.packet->CreateFragment (0, maxSize);
- data.packet->RemoveAtStart (maxSize);
- m_data.push_front (data);
- return first;
- }
-
+ {
+ Ptr<Packet> first = data.packet->CreateFragment (0, maxSize);
+ data.packet->RemoveAtStart (maxSize);
+ m_data.push_front (data);
+ return first;
+ }
+
fromAddress = Inet6SocketAddress (data.fromIp, data.fromProtocol);
return data.packet;
}
@@ -285,9 +285,9 @@
uint32_t rx = 0;
for (std::list<Data>::const_iterator it = m_data.begin () ; it != m_data.end () ; ++it)
- {
- rx+= (it->packet)->GetSize ();
- }
+ {
+ rx+= (it->packet)->GetSize ();
+ }
return rx;
}
@@ -297,39 +297,39 @@
NS_LOG_FUNCTION (this << *p << hdr << device);
if (m_shutdownRecv)
- {
- return false;
- }
+ {
+ return false;
+ }
if ((m_src == Ipv6Address::GetAny () || hdr.GetDestinationAddress () == m_src) &&
- (m_dst == Ipv6Address::GetAny () || hdr.GetSourceAddress () == m_dst) &&
- hdr.GetNextHeader () == m_protocol)
- {
- Ptr<Packet> copy = p->Copy ();
-
- if (m_protocol == Icmpv6L4Protocol::GetStaticProtocolNumber ())
+ (m_dst == Ipv6Address::GetAny () || hdr.GetSourceAddress () == m_dst) &&
+ hdr.GetNextHeader () == m_protocol)
{
- /* filter */
- Icmpv6Header icmpHeader;
- copy->PeekHeader (icmpHeader);
- uint8_t type = icmpHeader.GetType ();
+ Ptr<Packet> copy = p->Copy ();
+
+ if (m_protocol == Icmpv6L4Protocol::GetStaticProtocolNumber ())
+ {
+ /* filter */
+ Icmpv6Header icmpHeader;
+ copy->PeekHeader (icmpHeader);
+ uint8_t type = icmpHeader.GetType ();
- if ((1 << type) & m_icmpFilter)
- {
- /* packet filtered */
- return false;
- }
+ if ((1 << type) & m_icmpFilter)
+ {
+ /* packet filtered */
+ return false;
+ }
+ }
+
+ copy->AddHeader (hdr);
+ struct Data data;
+ data.packet = copy;
+ data.fromIp = hdr.GetSourceAddress ();
+ data.fromProtocol = hdr.GetNextHeader ();
+ m_data.push_back (data);
+ NotifyDataRecv ();
+ return true;
}
-
- copy->AddHeader (hdr);
- struct Data data;
- data.packet = copy;
- data.fromIp = hdr.GetSourceAddress ();
- data.fromProtocol = hdr.GetNextHeader ();
- m_data.push_back (data);
- NotifyDataRecv ();
- return true;
- }
return false;
}
--- a/src/internet-stack/ipv6-raw-socket-impl.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ipv6-raw-socket-impl.h Wed Dec 30 14:22:25 2009 +0100
@@ -29,7 +29,7 @@
namespace ns3
{
-
+
class NetDevice;
class Node;
@@ -39,214 +39,214 @@
*/
class Ipv6RawSocketImpl : public Socket
{
- public:
- /**
- * \brief Get the type ID of this class.
- * \return type ID
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief Get the type ID of this class.
+ * \return type ID
+ */
+ static TypeId GetTypeId ();
+
+ /**
+ * \brief Constructor.
+ */
+ Ipv6RawSocketImpl ();
+
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6RawSocketImpl ();
- /**
- * \brief Constructor.
- */
- Ipv6RawSocketImpl ();
-
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6RawSocketImpl ();
+ /**
+ * \brief Set the node.
+ * \param node node to set
+ */
+ void SetNode (Ptr<Node> node);
- /**
- * \brief Set the node.
- * \param node node to set
- */
- void SetNode (Ptr<Node> node);
+ /**
+ * \brief Get last error number.
+ * \return error number
+ */
+ virtual enum Socket::SocketErrno GetErrno () const;
- /**
- * \brief Get last error number.
- * \return error number
- */
- virtual enum Socket::SocketErrno GetErrno () const;
+ /**
+ * \brief Get node.
+ * \return node associated with this raw socket.
+ */
+ virtual Ptr<Node> GetNode () const;
- /**
- * \brief Get node.
- * \return node associated with this raw socket.
- */
- virtual Ptr<Node> GetNode () const;
+ /**
+ * \brief Bind the socket to address.
+ * \param address bind to this address
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int Bind (const Address& address);
- /**
- * \brief Bind the socket to address.
- * \param address bind to this address
- * \return 0 if success, -1 otherwise
- */
- virtual int Bind (const Address& address);
-
- /**
- * \brief Bind socket.
- * \return 0 if success, -1 otherwise
- */
- virtual int Bind ();
+ /**
+ * \brief Bind socket.
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int Bind ();
- /**
- * \brief Get socket address.
- * \param address socket address if method success
- * \return 0 if success, -1 otherwise
- */
- virtual int GetSockName (Address& address) const;
+ /**
+ * \brief Get socket address.
+ * \param address socket address if method success
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int GetSockName (Address& address) const;
- /**
- * \brief Close the socket.
- * \return 0 if success, -1 otherwise
- */
- virtual int Close ();
+ /**
+ * \brief Close the socket.
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int Close ();
- /**
- * \brief Shutdown send capability.
- * \return 0 if success, -1 otherwise
- */
- virtual int ShutdownSend ();
+ /**
+ * \brief Shutdown send capability.
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int ShutdownSend ();
+
+ /**
+ * \brief Shutdown receive capability.
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int ShutdownRecv ();
- /**
- * \brief Shutdown receive capability.
- * \return 0 if success, -1 otherwise
- */
- virtual int ShutdownRecv ();
-
- /**
- * \brief Connect to address.
- * \param address address
- * \return 0 if success, -1 otherwise
- */
- virtual int Connect (const Address& address);
+ /**
+ * \brief Connect to address.
+ * \param address address
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int Connect (const Address& address);
+
+ /**
+ * \brief Listen.
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int Listen ();
- /**
- * \brief Listen.
- * \return 0 if success, -1 otherwise
- */
- virtual int Listen ();
+ /**
+ * \brief Get TX size available.
+ * \return TX size
+ */
+ virtual uint32_t GetTxAvailable () const;
- /**
- * \brief Get TX size available.
- * \return TX size
- */
- virtual uint32_t GetTxAvailable () const;
+ /**
+ * \brief Get RX size available.
+ * \return RX size
+ */
+ virtual uint32_t GetRxAvailable () const;
- /**
- * \brief Get RX size available.
- * \return RX size
- */
- virtual uint32_t GetRxAvailable () const;
+ /**
+ * \brief Send a packet.
+ * \param p packet to send
+ * \param flags additionnal flags
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int Send (Ptr<Packet> p, uint32_t flags);
- /**
- * \brief Send a packet.
- * \param p packet to send
- * \param flags additionnal flags
- * \return 0 if success, -1 otherwise
- */
- virtual int Send (Ptr<Packet> p, uint32_t flags);
-
- /**
- * \brief Send a packet.
- * \param p packet to send
- * \param flags additionnal flags
- * \param toAddress destination address
- * \return 0 if success, -1 otherwise
- */
- virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address& toAddress);
+ /**
+ * \brief Send a packet.
+ * \param p packet to send
+ * \param flags additionnal flags
+ * \param toAddress destination address
+ * \return 0 if success, -1 otherwise
+ */
+ virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address& toAddress);
+
+ /**
+ * \brief Receive packet.
+ * \param maxSize maximum size
+ * \param flags additionnal flags
+ * \return packet received
+ */
+ virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
- /**
- * \brief Receive packet.
- * \param maxSize maximum size
- * \param flags additionnal flags
- * \return packet received
- */
- virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
-
- /**
- * \brief Receive packet.
- * \param maxSize maximum size
- * \param flags additionnal flags
- * \param fromAddress source address
- * \return packet received
- */
- virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, Address& fromAddress);
-
- /**
- * \brief Set protocol field.
- * \param protocol protocol to set
- */
- void SetProtocol (uint16_t protocol);
-
- /**
- * \brief Forward up to receive method.
- * \param p packet
- * \param hdr IPv6 header
- * \param device device
- * \return true if forwarded, false otherwise
- */
- bool ForwardUp (Ptr<const Packet> p, Ipv6Header hdr, Ptr<NetDevice> device);
+ /**
+ * \brief Receive packet.
+ * \param maxSize maximum size
+ * \param flags additionnal flags
+ * \param fromAddress source address
+ * \return packet received
+ */
+ virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, Address& fromAddress);
+
+ /**
+ * \brief Set protocol field.
+ * \param protocol protocol to set
+ */
+ void SetProtocol (uint16_t protocol);
- private:
- /**
- * \struct Data
- * \brief IPv6 raw data and additionnal information.
- */
- struct Data
+ /**
+ * \brief Forward up to receive method.
+ * \param p packet
+ * \param hdr IPv6 header
+ * \param device device
+ * \return true if forwarded, false otherwise
+ */
+ bool ForwardUp (Ptr<const Packet> p, Ipv6Header hdr, Ptr<NetDevice> device);
+
+private:
+ /**
+ * \struct Data
+ * \brief IPv6 raw data and additionnal information.
+ */
+ struct Data
{
Ptr<Packet> packet; /**< Packet data */
Ipv6Address fromIp; /**< Source address */
uint16_t fromProtocol; /**< Protocol used */
};
- /**
- * \brief Dispose object.
- */
- virtual void DoDispose ();
+ /**
+ * \brief Dispose object.
+ */
+ virtual void DoDispose ();
+
+ /**
+ * \brief Last error number.
+ */
+ enum Socket::SocketErrno m_err;
- /**
- * \brief Last error number.
- */
- enum Socket::SocketErrno m_err;
-
- /**
- * \brief Node.
- */
- Ptr<Node> m_node;
+ /**
+ * \brief Node.
+ */
+ Ptr<Node> m_node;
- /**
- * \brief Source address.
- */
- Ipv6Address m_src;
+ /**
+ * \brief Source address.
+ */
+ Ipv6Address m_src;
- /**
- * \brief Destination address.
- */
- Ipv6Address m_dst;
+ /**
+ * \brief Destination address.
+ */
+ Ipv6Address m_dst;
- /**
- * \brief Protocol.
- */
- uint16_t m_protocol;
+ /**
+ * \brief Protocol.
+ */
+ uint16_t m_protocol;
- /**
- * \brief Packet waiting to be processed.
- */
- std::list<struct Data> m_data;
+ /**
+ * \brief Packet waiting to be processed.
+ */
+ std::list<struct Data> m_data;
- /**
- * \brief Flag to shutdown send capability.
- */
- bool m_shutdownSend;
-
- /**
- * \brief Flag to shutdown receive capability.
- */
- bool m_shutdownRecv;
+ /**
+ * \brief Flag to shutdown send capability.
+ */
+ bool m_shutdownSend;
- /**
- * \brief ICMPv6 filter.
- */
- uint32_t m_icmpFilter;
+ /**
+ * \brief Flag to shutdown receive capability.
+ */
+ bool m_shutdownRecv;
+
+ /**
+ * \brief ICMPv6 filter.
+ */
+ uint32_t m_icmpFilter;
};
} /* namespace ns3 */
--- a/src/internet-stack/ndisc-cache.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ndisc-cache.cc Wed Dec 30 14:22:25 2009 +0100
@@ -37,10 +37,10 @@
static TypeId tid = TypeId ("ns3::NdiscCache")
.SetParent<Object> ()
.AddAttribute ("UnresolvedQueueSize",
- "Size of the queue for packets pending an NA reply.",
- UintegerValue (DEFAULT_UNRES_QLEN),
- MakeUintegerAccessor (&NdiscCache::m_unresQlen),
- MakeUintegerChecker<uint32_t> ())
+ "Size of the queue for packets pending an NA reply.",
+ UintegerValue (DEFAULT_UNRES_QLEN),
+ MakeUintegerAccessor (&NdiscCache::m_unresQlen),
+ MakeUintegerChecker<uint32_t> ())
;
return tid;
}
@@ -89,10 +89,10 @@
NS_LOG_FUNCTION (this << dst);
if (m_ndCache.find (dst) != m_ndCache.end ())
- {
- NdiscCache::Entry* entry = m_ndCache[dst];
- return entry;
- }
+ {
+ NdiscCache::Entry* entry = m_ndCache[dst];
+ return entry;
+ }
return 0;
}
@@ -110,27 +110,27 @@
void NdiscCache::Remove (NdiscCache::Entry* entry)
{
NS_LOG_FUNCTION_NOARGS ();
-
+
for (CacheI i = m_ndCache.begin () ; i != m_ndCache.end () ; i++)
- {
- if ((*i).second == entry)
{
- m_ndCache.erase (i);
- entry->ClearWaitingPacket ();
- delete entry;
- return;
+ if ((*i).second == entry)
+ {
+ m_ndCache.erase (i);
+ entry->ClearWaitingPacket ();
+ delete entry;
+ return;
+ }
}
- }
}
void NdiscCache::Flush ()
{
NS_LOG_FUNCTION_NOARGS ();
-
+
for (CacheI i = m_ndCache.begin () ; i != m_ndCache.end () ; i++)
- {
- delete (*i).second; /* delete the pointer NdiscCache::Entry */
- }
+ {
+ delete (*i).second; /* delete the pointer NdiscCache::Entry */
+ }
m_ndCache.erase (m_ndCache.begin (), m_ndCache.end ());
}
@@ -178,11 +178,11 @@
NS_LOG_FUNCTION (this << p);
if (m_waiting.size () >= m_ndCache->GetUnresQlen ())
- {
- /* we store only m_unresQlen packet => first packet in first packet remove */
- /* XXX report packet as 'dropped' */
- m_waiting.remove (0);
- }
+ {
+ /* we store only m_unresQlen packet => first packet in first packet remove */
+ /* XXX report packet as 'dropped' */
+ m_waiting.remove (0);
+ }
m_waiting.push_back (p);
}
@@ -207,42 +207,42 @@
/* determine source address */
if (m_ipv6Address.IsLinkLocal ())
- {
- addr = m_ndCache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();;
- }
+ {
+ addr = m_ndCache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();;
+ }
else if (!m_ipv6Address.IsAny ())
- {
- addr = m_ndCache->GetInterface ()->GetAddressMatchingDestination (m_ipv6Address).GetAddress ();
+ {
+ addr = m_ndCache->GetInterface ()->GetAddressMatchingDestination (m_ipv6Address).GetAddress ();
- if (addr.IsAny ()) /* maybe address has expired */
- {
- /* delete the entry */
- m_ndCache->Remove (this);
- return;
+ if (addr.IsAny ()) /* maybe address has expired */
+ {
+ /* delete the entry */
+ m_ndCache->Remove (this);
+ return;
+ }
}
- }
if (GetNSRetransmit () < icmpv6->MAX_MULTICAST_SOLICIT)
- {
- IncNSRetransmit ();
+ {
+ IncNSRetransmit ();
- icmpv6->SendNS (addr, Ipv6Address::MakeSolicitedAddress (m_ipv6Address), m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
- /* arm the timer again */
- StartRetransmitTimer ();
- }
+ icmpv6->SendNS (addr, Ipv6Address::MakeSolicitedAddress (m_ipv6Address), m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
+ /* arm the timer again */
+ StartRetransmitTimer ();
+ }
else
- {
- Ptr<Packet> malformedPacket = m_waiting.front ();
- if (malformedPacket == 0)
{
- malformedPacket = Create<Packet> ();
+ Ptr<Packet> malformedPacket = m_waiting.front ();
+ if (malformedPacket == 0)
+ {
+ malformedPacket = Create<Packet> ();
+ }
+
+ icmpv6->SendErrorDestinationUnreachable (malformedPacket, addr, Icmpv6Header::ICMPV6_ADDR_UNREACHABLE);
+
+ /* delete the entry */
+ m_ndCache->Remove (this);
}
-
- icmpv6->SendErrorDestinationUnreachable (malformedPacket, addr, Icmpv6Header::ICMPV6_ADDR_UNREACHABLE);
-
- /* delete the entry */
- m_ndCache->Remove (this);
- }
}
void NdiscCache::Entry::FunctionDelayTimeout ()
@@ -255,24 +255,24 @@
this->MarkProbe ();
if (m_ipv6Address.IsLinkLocal ())
- {
- addr = m_ndCache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();
- }
+ {
+ addr = m_ndCache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();
+ }
else if (!m_ipv6Address.IsAny ())
- {
- addr = m_ndCache->GetInterface ()->GetAddressMatchingDestination (m_ipv6Address).GetAddress ();
- if (addr.IsAny ()) /* maybe address has expired */
{
- /* delete the entry */
- m_ndCache->Remove (this);
+ addr = m_ndCache->GetInterface ()->GetAddressMatchingDestination (m_ipv6Address).GetAddress ();
+ if (addr.IsAny ()) /* maybe address has expired */
+ {
+ /* delete the entry */
+ m_ndCache->Remove (this);
+ return;
+ }
+ }
+ else
+ {
+ /* should not happen */
return;
}
- }
- else
- {
- /* should not happen */
- return;
- }
Ptr<Packet> p = icmpv6->ForgeNS (addr, m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
m_ndCache->GetDevice ()->Send (p, this->GetMacAddress (), Ipv6L3Protocol::PROT_NUMBER);
@@ -289,42 +289,42 @@
Ptr<Icmpv6L4Protocol> icmpv6 = ipv6->GetIcmpv6 ();
if (GetNSRetransmit () < icmpv6->MAX_UNICAST_SOLICIT)
- {
- Ipv6Address addr;
+ {
+ Ipv6Address addr;
- if (m_ipv6Address.IsLinkLocal ())
- {
- addr = m_ndCache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();
- }
- else if (!m_ipv6Address.IsAny ())
- {
- addr = m_ndCache->GetInterface ()->GetAddressMatchingDestination (m_ipv6Address).GetAddress ();
- if (addr.IsAny ()) /* maybe address has expired */
- {
- /* delete the entry */
- m_ndCache->Remove (this);
- return;
- }
+ if (m_ipv6Address.IsLinkLocal ())
+ {
+ addr = m_ndCache->GetInterface ()->GetLinkLocalAddress ().GetAddress ();
+ }
+ else if (!m_ipv6Address.IsAny ())
+ {
+ addr = m_ndCache->GetInterface ()->GetAddressMatchingDestination (m_ipv6Address).GetAddress ();
+ if (addr.IsAny ()) /* maybe address has expired */
+ {
+ /* delete the entry */
+ m_ndCache->Remove (this);
+ return;
+ }
+ }
+ else
+ {
+ /* should not happen */
+ return;
+ }
+
+ IncNSRetransmit ();
+ /* icmpv6->SendNS (m_ndCache->GetInterface ()->GetLinkLocalAddress (), m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ()); */
+ Ptr<Packet> p = icmpv6->ForgeNS (addr, m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
+ m_ndCache->GetDevice ()->Send (p, this->GetMacAddress (), Ipv6L3Protocol::PROT_NUMBER);
+
+ /* arm the timer again */
+ StartProbeTimer ();
}
- else
+ else
{
- /* should not happen */
- return;
+ /* delete the entry */
+ m_ndCache->Remove (this);
}
-
- IncNSRetransmit ();
- /* icmpv6->SendNS (m_ndCache->GetInterface ()->GetLinkLocalAddress (), m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ()); */
- Ptr<Packet> p = icmpv6->ForgeNS (addr, m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
- m_ndCache->GetDevice ()->Send (p, this->GetMacAddress (), Ipv6L3Protocol::PROT_NUMBER);
-
- /* arm the timer again */
- StartProbeTimer ();
- }
- else
- {
- /* delete the entry */
- m_ndCache->Remove (this);
- }
}
void NdiscCache::Entry::SetIpv6Address (Ipv6Address ipv6Address)
@@ -428,9 +428,9 @@
m_state = INCOMPLETE;
if (p)
- {
- m_waiting.push_back (p);
- }
+ {
+ m_waiting.push_back (p);
+ }
}
std::list<Ptr<Packet> > NdiscCache::Entry::MarkReachable (Address mac)
--- a/src/internet-stack/ndisc-cache.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/internet-stack/ndisc-cache.h Wed Dec 30 14:22:25 2009 +0100
@@ -45,412 +45,412 @@
*/
class NdiscCache : public Object
{
- public:
- class Entry;
+public:
+ class Entry;
+
+ /**
+ * \brief Get the type ID
+ * \return type ID
+ */
+ static TypeId GetTypeId ();
+
+ /**
+ * \brief Default value for unres qlen.
+ */
+ static const uint32_t DEFAULT_UNRES_QLEN = 3;
+
+ /**
+ * \brief Constructor.
+ */
+ NdiscCache ();
+
+ /**
+ * \brief Destructor.
+ */
+ ~NdiscCache ();
+
+ /**
+ * \brief Get the NetDevice associated with this cache.
+ * \return NetDevice
+ */
+ Ptr<NetDevice> GetDevice () const;
+
+ /**
+ * \brief Get the Ipv6Interface associated with this cache.
+ */
+ Ptr<Ipv6Interface> GetInterface () const;
+
+ /**
+ * \brief Lookup in the cache.
+ * \param dst destination address
+ * \return the entry if found, 0 otherwise
+ */
+ NdiscCache::Entry* Lookup (Ipv6Address dst);
- /**
- * \brief Get the type ID
- * \return type ID
- */
- static TypeId GetTypeId ();
+ /**
+ * \brief Add an entry.
+ * \param to address to add
+ * \return an new Entry
+ */
+ NdiscCache::Entry* Add (Ipv6Address to);
+
+ /**
+ * \brief Delete an entry.
+ * \param entry pointer to delete from the list.
+ */
+ void Remove (NdiscCache::Entry* entry);
+
+ /**
+ * \brief Flush the cache.
+ */
+ void Flush ();
- /**
- * \brief Default value for unres qlen.
- */
- static const uint32_t DEFAULT_UNRES_QLEN = 3;
+ /**
+ * \brief Set the max number of waiting packet.
+ * \param unresQlen value to set
+ */
+ void SetUnresQlen (uint32_t unresQlen);
+
+ /**
+ * \brief Get the max number of waiting packet.
+ * \return max number
+ */
+ uint32_t GetUnresQlen ();
+ /**
+ * \brief Set the device and interface.
+ * \param device the device
+ * \param interface the IPv6 interface
+ */
+ void SetDevice (Ptr<NetDevice> device, Ptr<Ipv6Interface> interface);
+
+ /**
+ * \class Entry
+ * \brief A record that holds information about an NdiscCache entry.
+ */
+ class Entry
+ {
+ public:
/**
* \brief Constructor.
- */
- NdiscCache ();
-
- /**
- * \brief Destructor.
+ * \param nd The NdiscCache this entry belongs to.
*/
- ~NdiscCache ();
-
- /**
- * \brief Get the NetDevice associated with this cache.
- * \return NetDevice
- */
- Ptr<NetDevice> GetDevice () const;
-
- /**
- * \brief Get the Ipv6Interface associated with this cache.
- */
- Ptr<Ipv6Interface> GetInterface () const;
+ Entry (NdiscCache* nd);
/**
- * \brief Lookup in the cache.
- * \param dst destination address
- * \return the entry if found, 0 otherwise
+ * \brief Changes the state to this entry to INCOMPLETE.
+ * \param p packet that wait to be sent
+ */
+ void MarkIncomplete (Ptr<Packet> p);
+
+ /**
+ * \brief Changes the state to this entry to REACHABLE.
+ * \param mac MAC address
+ * \return the list of packet waiting
*/
- NdiscCache::Entry* Lookup (Ipv6Address dst);
+ std::list<Ptr<Packet> > MarkReachable (Address mac);
+
+ /**
+ * \brief Changes the state to this entry to PROBE.
+ */
+ void MarkProbe ();
+
+ /**
+ * \brief Changes the state to this entry to STALE.
+ * \param mac L2 address
+ * \return the list of packet waiting
+ */
+ std::list<Ptr<Packet> > MarkStale (Address mac);
/**
- * \brief Add an entry.
- * \param to address to add
- * \return an new Entry
+ * \brief Changes the state to this entry to STALE.
*/
- NdiscCache::Entry* Add (Ipv6Address to);
+ void MarkStale ();
+
+ /**
+ * \brief Changes the state to this entry to REACHABLE.
+ */
+ void MarkReachable ();
/**
- * \brief Delete an entry.
- * \param entry pointer to delete from the list.
+ * \brief Change the state to this entry to DELAY.
*/
- void Remove (NdiscCache::Entry* entry);
+ void MarkDelay ();
+
+ /**
+ * \brief Add a packet (or replace old value) in the queue.
+ * \param p packet to add
+ */
+ void AddWaitingPacket (Ptr<Packet> p);
+
+ /**
+ * \brief Clear the waiting packet list.
+ */
+ void ClearWaitingPacket ();
/**
- * \brief Flush the cache.
+ * \brief Is the entry STALE
+ * \return true if the entry is in STALE state, false otherwise
*/
- void Flush ();
+ bool IsStale () const;
/**
- * \brief Set the max number of waiting packet.
- * \param unresQlen value to set
+ * \brief Is the entry REACHABLE
+ * \return true if the entry is in REACHABLE state, false otherwise
*/
- void SetUnresQlen (uint32_t unresQlen);
+ bool IsReachable () const;
+
+ /**
+ * \brief Is the entry DELAY
+ * \return true if the entry is in DELAY state, false otherwise
+ */
+ bool IsDelay () const;
+
+ /**
+ * \brief Is the entry INCOMPLETE
+ * \return true if the entry is in INCOMPLETE state, false otherwise
+ */
+ bool IsIncomplete () const;
/**
- * \brief Get the max number of waiting packet.
- * \return max number
+ * \brief Is the entry PROBE
+ * \return true if the entry is in PROBE state, false otherwise
*/
- uint32_t GetUnresQlen ();
+ bool IsProbe () const;
+
+ /**
+ * \brief Get the MAC address of this entry.
+ * \return the L2 address
+ */
+ Address GetMacAddress () const;
/**
- * \brief Set the device and interface.
- * \param device the device
- * \param interface the IPv6 interface
+ * \brief Set the MAC address of this entry.
+ * \param mac the MAC address to set
*/
- void SetDevice (Ptr<NetDevice> device, Ptr<Ipv6Interface> interface);
+ void SetMacAddress (Address mac);
+
+ /**
+ * \brief If the entry is a host or a router.
+ * \return true if the node is a router, 0 if it is a host
+ */
+ bool IsRouter () const;
+
+ /**
+ * \brief Set the node type.
+ * \param router true is a router, false means a host
+ */
+ void SetRouter (bool router);
/**
- * \class Entry
- * \brief A record that holds information about an NdiscCache entry.
+ * \brief Get the number of NS retransmit.
+ * \return number of NS that have been retransmit
*/
- class Entry
- {
- public:
- /**
- * \brief Constructor.
- * \param nd The NdiscCache this entry belongs to.
- */
- Entry (NdiscCache* nd);
+ uint8_t GetNSRetransmit () const;
- /**
- * \brief Changes the state to this entry to INCOMPLETE.
- * \param p packet that wait to be sent
- */
- void MarkIncomplete (Ptr<Packet> p);
-
- /**
- * \brief Changes the state to this entry to REACHABLE.
- * \param mac MAC address
- * \return the list of packet waiting
- */
- std::list<Ptr<Packet> > MarkReachable (Address mac);
-
- /**
- * \brief Changes the state to this entry to PROBE.
- */
- void MarkProbe ();
+ /**
+ * \brief Increment NS retransmit.
+ */
+ void IncNSRetransmit ();
- /**
- * \brief Changes the state to this entry to STALE.
- * \param mac L2 address
- * \return the list of packet waiting
- */
- std::list<Ptr<Packet> > MarkStale (Address mac);
-
- /**
- * \brief Changes the state to this entry to STALE.
- */
- void MarkStale ();
-
- /**
- * \brief Changes the state to this entry to REACHABLE.
- */
- void MarkReachable ();
+ /**
+ * \brief Reset NS retransmit (=0).
+ */
+ void ResetNSRetransmit ();
- /**
- * \brief Change the state to this entry to DELAY.
- */
- void MarkDelay ();
-
- /**
- * \brief Add a packet (or replace old value) in the queue.
- * \param p packet to add
- */
- void AddWaitingPacket (Ptr<Packet> p);
-
- /**
- * \brief Clear the waiting packet list.
- */
- void ClearWaitingPacket ();
-
- /**
- * \brief Is the entry STALE
- * \return true if the entry is in STALE state, false otherwise
- */
- bool IsStale () const;
+ /**
+ * \brief Get the time of last reachability confirmation.
+ * \return time
+ */
+ Time GetLastReachabilityConfirmation () const;
- /**
- * \brief Is the entry REACHABLE
- * \return true if the entry is in REACHABLE state, false otherwise
- */
- bool IsReachable () const;
-
- /**
- * \brief Is the entry DELAY
- * \return true if the entry is in DELAY state, false otherwise
- */
- bool IsDelay () const;
+ /**
+ * \brief Update the time of last reachability confirmation.
+ */
+ void UpdateLastReachabilityconfirmation ();
- /**
- * \brief Is the entry INCOMPLETE
- * \return true if the entry is in INCOMPLETE state, false otherwise
- */
- bool IsIncomplete () const;
+ /**
+ * \brief Start the reachable timer.
+ */
+ void StartReachableTimer ();
- /**
- * \brief Is the entry PROBE
- * \return true if the entry is in PROBE state, false otherwise
- */
- bool IsProbe () const;
-
- /**
- * \brief Get the MAC address of this entry.
- * \return the L2 address
- */
- Address GetMacAddress () const;
+ /**
+ * \brief Stop the reachable timer.
+ */
+ void StopReachableTimer ();
- /**
- * \brief Set the MAC address of this entry.
- * \param mac the MAC address to set
- */
- void SetMacAddress (Address mac);
-
- /**
- * \brief If the entry is a host or a router.
- * \return true if the node is a router, 0 if it is a host
- */
- bool IsRouter () const;
-
- /**
- * \brief Set the node type.
- * \param router true is a router, false means a host
- */
- void SetRouter (bool router);
+ /**
+ * \brief Start retransmit timer.
+ */
+ void StartRetransmitTimer ();
- /**
- * \brief Get the number of NS retransmit.
- * \return number of NS that have been retransmit
- */
- uint8_t GetNSRetransmit () const;
-
- /**
- * \brief Increment NS retransmit.
- */
- void IncNSRetransmit ();
+ /**
+ * \brief Stop retransmit timer.
+ */
+ void StopRetransmitTimer ();
- /**
- * \brief Reset NS retransmit (=0).
- */
- void ResetNSRetransmit ();
-
- /**
- * \brief Get the time of last reachability confirmation.
- * \return time
- */
- Time GetLastReachabilityConfirmation () const;
+ /**
+ * \brief Start probe timer.
+ */
+ void StartProbeTimer ();
- /**
- * \brief Update the time of last reachability confirmation.
- */
- void UpdateLastReachabilityconfirmation ();
-
- /**
- * \brief Start the reachable timer.
- */
- void StartReachableTimer ();
-
- /**
- * \brief Stop the reachable timer.
- */
- void StopReachableTimer ();
+ /**
+ * \brief Stop probe timer.
+ */
+ void StopProbeTimer ();
- /**
- * \brief Start retransmit timer.
- */
- void StartRetransmitTimer ();
-
- /**
- * \brief Stop retransmit timer.
- */
- void StopRetransmitTimer ();
-
- /**
- * \brief Start probe timer.
- */
- void StartProbeTimer ();
-
- /**
- * \brief Stop probe timer.
- */
- void StopProbeTimer ();
+ /**
+ * \brief Start delay timer.
+ */
+ void StartDelayTimer ();
- /**
- * \brief Start delay timer.
- */
- void StartDelayTimer ();
-
- /**
- * \brief Stop delay timer.
- */
- void StopDelayTimer ();
-
- /**
- * \brief Function called when reachable timer timeout.
- */
- void FunctionReachableTimeout ();
+ /**
+ * \brief Stop delay timer.
+ */
+ void StopDelayTimer ();
- /**
- * \brief Function called when retransmit timer timeout.
- * It verify that the NS retransmit has reached the max so discard the entry
- * otherwise it retransmit a NS.
- */
- void FunctionRetransmitTimeout ();
+ /**
+ * \brief Function called when reachable timer timeout.
+ */
+ void FunctionReachableTimeout ();
- /**
- * \brief Function called when probe timer timeout.
- */
- void FunctionProbeTimeout ();
-
- /**
- * \brief Function called when delay timer timeout.
- */
- void FunctionDelayTimeout ();
-
- /**
- * \brief Set the IPv6 address.
- * \param ipv6Address IPv6 address
- */
- void SetIpv6Address (Ipv6Address ipv6Address);
+ /**
+ * \brief Function called when retransmit timer timeout.
+ * It verify that the NS retransmit has reached the max so discard the entry
+ * otherwise it retransmit a NS.
+ */
+ void FunctionRetransmitTimeout ();
- private:
- /**
- * \brief The IPv6 address.
- */
- Ipv6Address m_ipv6Address;
+ /**
+ * \brief Function called when probe timer timeout.
+ */
+ void FunctionProbeTimeout ();
- /**
- * \brief The Entry state enumeration.
- */
- enum NdiscCacheEntryState_e
- {
- INCOMPLETE, /**< No mapping between IPv6 and L2 addresses */
- REACHABLE, /**< Mapping exists between IPv6 and L2 addresses */
- STALE, /**< Mapping is stale */
- DELAY, /**< Try to wait contact from remote host */
- PROBE /**< Try to contact IPv6 address to know again its L2 address */
- };
+ /**
+ * \brief Function called when delay timer timeout.
+ */
+ void FunctionDelayTimeout ();
- /**
- * \brief The state of the entry.
- */
- NdiscCacheEntryState_e m_state;
-
- /**
- * \brief the NdiscCache associated.
- */
- NdiscCache* m_ndCache;
-
- /**
- * \brief The MAC address.
- */
- Address m_macAddress;
+ /**
+ * \brief Set the IPv6 address.
+ * \param ipv6Address IPv6 address
+ */
+ void SetIpv6Address (Ipv6Address ipv6Address);
- /**
- * \brief The list of packet waiting.
- */
- std::list<Ptr<Packet> > m_waiting;
-
- /**
- * \brief Type of node (router or host).
- */
- bool m_router;
-
- /**
- * \brief Reachable timer (used for NUD in REACHABLE state).
- */
- Timer m_reachableTimer;
-
- /**
- * \brief Retransmission timer (used for NUD in INCOMPLETE state).
- */
- Timer m_retransTimer;
+ private:
+ /**
+ * \brief The IPv6 address.
+ */
+ Ipv6Address m_ipv6Address;
- /**
- * \brief Probe timer (used for NUD in PROBE state).
- */
- Timer m_probeTimer;
-
- /**
- * \brief Delay timer (used for NUD when in DELAY state).
- */
- Timer m_delayTimer;
-
- /**
- * \brief Last time we see a reachability confirmation.
- */
- Time m_lastReachabilityConfirmation;
-
- /**
- * \brief Number of NS retransmission.
- */
- uint8_t m_nsRetransmit;
+ /**
+ * \brief The Entry state enumeration.
+ */
+ enum NdiscCacheEntryState_e
+ {
+ INCOMPLETE, /**< No mapping between IPv6 and L2 addresses */
+ REACHABLE, /**< Mapping exists between IPv6 and L2 addresses */
+ STALE, /**< Mapping is stale */
+ DELAY, /**< Try to wait contact from remote host */
+ PROBE /**< Try to contact IPv6 address to know again its L2 address */
};
- private:
- typedef sgi::hash_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash> Cache;
- typedef sgi::hash_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash>::iterator CacheI;
+ /**
+ * \brief The state of the entry.
+ */
+ NdiscCacheEntryState_e m_state;
+
+ /**
+ * \brief the NdiscCache associated.
+ */
+ NdiscCache* m_ndCache;
+
+ /**
+ * \brief The MAC address.
+ */
+ Address m_macAddress;
+
+ /**
+ * \brief The list of packet waiting.
+ */
+ std::list<Ptr<Packet> > m_waiting;
/**
- * \brief Copy constructor.
- * \param a cache to copy
+ * \brief Type of node (router or host).
+ */
+ bool m_router;
+
+ /**
+ * \brief Reachable timer (used for NUD in REACHABLE state).
+ */
+ Timer m_reachableTimer;
+
+ /**
+ * \brief Retransmission timer (used for NUD in INCOMPLETE state).
*/
- NdiscCache (NdiscCache const &a);
-
+ Timer m_retransTimer;
+
/**
- * \brief Equal operator.
- * \param a cache to copy
+ * \brief Probe timer (used for NUD in PROBE state).
*/
- NdiscCache& operator= (NdiscCache const &a);
+ Timer m_probeTimer;
+
+ /**
+ * \brief Delay timer (used for NUD when in DELAY state).
+ */
+ Timer m_delayTimer;
/**
- * \brief Dispose this object.
+ * \brief Last time we see a reachability confirmation.
*/
- void DoDispose ();
-
- /**
- * \brief The NetDevice.
- */
- Ptr<NetDevice> m_device;
+ Time m_lastReachabilityConfirmation;
/**
- * \brief the interface.
- */
- Ptr<Ipv6Interface> m_interface;
-
- /**
- * \brief A list of Entry.
+ * \brief Number of NS retransmission.
*/
- Cache m_ndCache;
+ uint8_t m_nsRetransmit;
+ };
+
+private:
+ typedef sgi::hash_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash> Cache;
+ typedef sgi::hash_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash>::iterator CacheI;
+
+ /**
+ * \brief Copy constructor.
+ * \param a cache to copy
+ */
+ NdiscCache (NdiscCache const &a);
+
+ /**
+ * \brief Equal operator.
+ * \param a cache to copy
+ */
+ NdiscCache& operator= (NdiscCache const &a);
- /**
- * \brief Max number of packet stored in m_waiting.
- */
- uint32_t m_unresQlen;
+ /**
+ * \brief Dispose this object.
+ */
+ void DoDispose ();
+
+ /**
+ * \brief The NetDevice.
+ */
+ Ptr<NetDevice> m_device;
+
+ /**
+ * \brief the interface.
+ */
+ Ptr<Ipv6Interface> m_interface;
+
+ /**
+ * \brief A list of Entry.
+ */
+ Cache m_ndCache;
+
+ /**
+ * \brief Max number of packet stored in m_waiting.
+ */
+ uint32_t m_unresQlen;
};
} /* namespace ns3 */
--- a/src/node/inet6-socket-address.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/inet6-socket-address.h Wed Dec 30 14:22:25 2009 +0100
@@ -35,105 +35,105 @@
*/
class Inet6SocketAddress
{
- public:
- /**
- * \brief Constructor.
- * \param ipv6 the IPv6 address
- * \param port the port
- */
- Inet6SocketAddress (Ipv6Address ipv6, uint16_t port);
+public:
+ /**
+ * \brief Constructor.
+ * \param ipv6 the IPv6 address
+ * \param port the port
+ */
+ Inet6SocketAddress (Ipv6Address ipv6, uint16_t port);
- /**
- * \brief Constructor (the port is set to zero).
- * \param ipv6 the IPv6 address
- */
- Inet6SocketAddress (Ipv6Address ipv6);
+ /**
+ * \brief Constructor (the port is set to zero).
+ * \param ipv6 the IPv6 address
+ */
+ Inet6SocketAddress (Ipv6Address ipv6);
- /**
- * \brief Constructor (the address is set to "any").
- * \param port the port
- */
- Inet6SocketAddress (uint16_t port);
+ /**
+ * \brief Constructor (the address is set to "any").
+ * \param port the port
+ */
+ Inet6SocketAddress (uint16_t port);
- /**
- * \brief Constructor.
- * \param ipv6 string which represents an IPv6 address
- * \param port the port
- */
- Inet6SocketAddress (const char* ipv6, uint16_t port);
+ /**
+ * \brief Constructor.
+ * \param ipv6 string which represents an IPv6 address
+ * \param port the port
+ */
+ Inet6SocketAddress (const char* ipv6, uint16_t port);
- /**
- * \brief Constructor.
- * \param ipv6 string which represents an IPv6 address
- */
- Inet6SocketAddress (const char* ipv6);
+ /**
+ * \brief Constructor.
+ * \param ipv6 string which represents an IPv6 address
+ */
+ Inet6SocketAddress (const char* ipv6);
- /**
- * \brief Get the port.
- * \return the port
- */
- uint16_t GetPort (void) const;
+ /**
+ * \brief Get the port.
+ * \return the port
+ */
+ uint16_t GetPort (void) const;
- /**
- * \brief Set the port
- * \param port the port
- */
- void SetPort (uint16_t port);
+ /**
+ * \brief Set the port
+ * \param port the port
+ */
+ void SetPort (uint16_t port);
- /**
- * \brief Get the IPv6 address.
- * \return the IPv6 address
- */
- Ipv6Address GetIpv6 (void) const;
+ /**
+ * \brief Get the IPv6 address.
+ * \return the IPv6 address
+ */
+ Ipv6Address GetIpv6 (void) const;
- /**
- * \brief Set the IPv6 address.
- * \param ipv6 the address
- */
- void SetIpv6 (Ipv6Address ipv6);
+ /**
+ * \brief Set the IPv6 address.
+ * \param ipv6 the address
+ */
+ void SetIpv6 (Ipv6Address ipv6);
- /**
- * \brief If the address match.
- * \param addr the address to test
- * \return true if the address match, false otherwise
- */
- static bool IsMatchingType (const Address &addr);
+ /**
+ * \brief If the address match.
+ * \param addr the address to test
+ * \return true if the address match, false otherwise
+ */
+ static bool IsMatchingType (const Address &addr);
- /**
- * \brief Get an Address instance which represents this
- * Inet6SocketAddress instance.
- */
- operator Address (void) const;
+ /**
+ * \brief Get an Address instance which represents this
+ * Inet6SocketAddress instance.
+ */
+ operator Address (void) const;
- /**
- * \brief Convert the address to a InetSocketAddress.
- * \param addr the address to convert
- * \return an Inet6SocketAddress instance corresponding to address
- */
- static Inet6SocketAddress ConvertFrom (const Address &addr);
+ /**
+ * \brief Convert the address to a InetSocketAddress.
+ * \param addr the address to convert
+ * \return an Inet6SocketAddress instance corresponding to address
+ */
+ static Inet6SocketAddress ConvertFrom (const Address &addr);
- private:
- /**
- * \brief Convert to Address.
- * \return Address instance
- */
- Address ConvertTo (void) const;
+private:
+ /**
+ * \brief Convert to Address.
+ * \return Address instance
+ */
+ Address ConvertTo (void) const;
- /**
- * \brief Get the type.
- * \return the type of Inet6SocketAddress
- */
- static uint8_t GetType (void);
+ /**
+ * \brief Get the type.
+ * \return the type of Inet6SocketAddress
+ */
+ static uint8_t GetType (void);
- /**
- * \brief The IPv6 address.
- */
- Ipv6Address m_ipv6;
+ /**
+ * \brief The IPv6 address.
+ */
+ Ipv6Address m_ipv6;
- /**
- * \brief The port.
- */
- uint16_t m_port;
+ /**
+ * \brief The port.
+ */
+ uint16_t m_port;
};
} /* namespace ns3 */
--- a/src/node/ipv6-address.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-address.cc Wed Dec 30 14:22:25 2009 +0100
@@ -46,17 +46,17 @@
static uint32_t lookuphash (unsigned char* k, uint32_t length, uint32_t level)
{
#define mix(a, b, c) \
-({ \
- (a) -= (b); (a) -= (c); (a) ^= ((c) >> 13); \
- (b) -= (c); (b) -= (a); (b) ^= ((a) << 8); \
- (c) -= (a); (c) -= (b); (c) ^= ((b) >> 13); \
- (a) -= (b); (a) -= (c); (a) ^= ((c) >> 12); \
- (b) -= (c); (b) -= (a); (b) ^= ((a) << 16); \
- (c) -= (a); (c) -= (b); (c) ^= ((b) >> 5); \
- (a) -= (b); (a) -= (c); (a) ^= ((c) >> 3); \
- (b) -= (c); (b) -= (a); (b) ^= ((a) << 10); \
- (c) -= (a); (c) -= (b); (c) ^= ((b) >> 15); \
-})
+ ({ \
+ (a) -= (b); (a) -= (c); (a) ^= ((c) >> 13); \
+ (b) -= (c); (b) -= (a); (b) ^= ((a) << 8); \
+ (c) -= (a); (c) -= (b); (c) ^= ((b) >> 13); \
+ (a) -= (b); (a) -= (c); (a) ^= ((c) >> 12); \
+ (b) -= (c); (b) -= (a); (b) ^= ((a) << 16); \
+ (c) -= (a); (c) -= (b); (c) ^= ((b) >> 5); \
+ (a) -= (b); (a) -= (c); (a) ^= ((c) >> 3); \
+ (b) -= (c); (b) -= (a); (b) ^= ((a) << 10); \
+ (c) -= (a); (c) -= (b); (c) ^= ((b) >> 15); \
+ })
typedef uint32_t ub4; /* unsigned 4-byte quantities */
typedef unsigned char ub1; /* unsigned 1-byte quantities */
@@ -72,19 +72,19 @@
/* handle most of the key */
while (len >= 12)
- {
- a += (k[0] + ((ub4)k[1] << 8) + ((ub4)k[2] << 16) + ((ub4)k[3] << 24));
- b += (k[4] + ((ub4)k[5] << 8) + ((ub4)k[6] << 16) + ((ub4)k[7] << 24));
- c += (k[8] + ((ub4)k[9] << 8) + ((ub4)k[10] << 16) + ((ub4)k[11] << 24));
- mix (a, b, c);
- k += 12;
- len -= 12;
- }
+ {
+ a += (k[0] + ((ub4)k[1] << 8) + ((ub4)k[2] << 16) + ((ub4)k[3] << 24));
+ b += (k[4] + ((ub4)k[5] << 8) + ((ub4)k[6] << 16) + ((ub4)k[7] << 24));
+ c += (k[8] + ((ub4)k[9] << 8) + ((ub4)k[10] << 16) + ((ub4)k[11] << 24));
+ mix (a, b, c);
+ k += 12;
+ len -= 12;
+ }
/* handle the last 11 bytes */
c += length;
switch (len) /* all the case statements fall through */
- {
+ {
case 11: c += ((ub4)k[10] << 24);
case 10: c += ((ub4)k[9] << 16);
case 9 : c += ((ub4)k[8] << 8); /* the first byte of c is reserved for the length */
@@ -96,10 +96,10 @@
case 3 : a += ((ub4)k[2] << 16);
case 2 : a += ((ub4)k[1] << 8);
case 1 : a += k[0];
- /* case 0: nothing left to add */
- }
+ /* case 0: nothing left to add */
+ }
mix (a, b, c);
-
+
#undef mix
/* report the result */
@@ -135,108 +135,108 @@
/* Leading :: requires some special handling. */
if (*address == ':')
- {
- if (*++address != ':')
{
- return (0);
+ if (*++address != ':')
+ {
+ return (0);
+ }
}
- }
curtok = address;
while ((ch = *address++) != '\0')
- {
- const char *pch = 0;
+ {
+ const char *pch = 0;
+
+ if ((pch = strchr ((xdigits = xdigits_l), ch)) == 0)
+ {
+ pch = strchr ((xdigits = xdigits_u), ch);
+ }
+
+ if (pch != 0)
+ {
+ val <<= 4;
+ val |= (pch - xdigits);
+
+ if (++seen_xdigits > 4)
+ {
+ return (0);
+ }
+ continue;
+ }
+ if (ch == ':')
+ {
+ curtok = address;
- if ((pch = strchr ((xdigits = xdigits_l), ch)) == 0)
- {
- pch = strchr ((xdigits = xdigits_u), ch);
+ if (!seen_xdigits)
+ {
+ if (colonp)
+ return (0);
+ colonp = tp;
+ continue;
+ }
+
+ if (tp + 2 > endp)
+ {
+ return (0);
+ }
+
+ *tp++ = (unsigned char) (val >> 8) & 0xff;
+ *tp++ = (unsigned char) val & 0xff;
+ seen_xdigits = 0;
+ val = 0;
+ continue;
+ }
+
+ /* TODO Handle IPv4 mapped address (2001::192.168.0.1) */
+#if 0
+ if (ch == '.' && ((tp + 4 /*NS_INADDRSZ*/) <= endp) &&
+ inet_pton4(curtok, tp) > 0)
+ {
+ tp += 4 /*NS_INADDRSZ*/;
+ seen_xdigits = 0;
+ break;/* '\0' was seen by inet_pton4(). */
+ }
+#endif
+ return (0);
}
- if (pch != 0)
- {
- val <<= 4;
- val |= (pch - xdigits);
-
- if (++seen_xdigits > 4)
- {
- return (0);
- }
- continue;
- }
- if (ch == ':')
+ if (seen_xdigits)
{
- curtok = address;
-
- if (!seen_xdigits)
- {
- if (colonp)
+ if (tp + 2 > endp)
+ {
return (0);
- colonp = tp;
- continue;
- }
-
- if (tp + 2 > endp)
- {
- return (0);
- }
-
+ }
*tp++ = (unsigned char) (val >> 8) & 0xff;
*tp++ = (unsigned char) val & 0xff;
- seen_xdigits = 0;
- val = 0;
- continue;
}
- /* TODO Handle IPv4 mapped address (2001::192.168.0.1) */
-#if 0
- if (ch == '.' && ((tp + 4 /*NS_INADDRSZ*/) <= endp) &&
- inet_pton4(curtok, tp) > 0)
+ if (colonp != 0)
{
- tp += 4 /*NS_INADDRSZ*/;
- seen_xdigits = 0;
- break;/* '\0' was seen by inet_pton4(). */
+ /*
+ * Since some memmove ()'s erroneously fail to handle
+ * overlapping regions, we'll do the shift by hand.
+ */
+ const int n = tp - colonp;
+ int i = 0;
+
+ if (tp == endp)
+ {
+ return (0);
+ }
+
+ for (i = 1; i <= n; i++)
+ {
+ endp[- i] = colonp[n - i];
+ colonp[n - i] = 0;
+ }
+
+ tp = endp;
}
-#endif
- return (0);
- }
- if (seen_xdigits)
- {
- if (tp + 2 > endp)
+ if (tp != endp)
{
return (0);
}
- *tp++ = (unsigned char) (val >> 8) & 0xff;
- *tp++ = (unsigned char) val & 0xff;
- }
-
- if (colonp != 0)
- {
- /*
- * Since some memmove ()'s erroneously fail to handle
- * overlapping regions, we'll do the shift by hand.
- */
- const int n = tp - colonp;
- int i = 0;
-
- if (tp == endp)
- {
- return (0);
- }
-
- for (i = 1; i <= n; i++)
- {
- endp[- i] = colonp[n - i];
- colonp[n - i] = 0;
- }
-
- tp = endp;
- }
-
- if (tp != endp)
- {
- return (0);
- }
memcpy (addr, tmp, 16);
return (1);
@@ -386,9 +386,9 @@
bool Ipv6Address::IsMulticast () const
{
if (m_address[0] == 0xff)
- {
- return true;
- }
+ {
+ return true;
+ }
return false;
}
@@ -404,9 +404,9 @@
/* a little bit ugly... */
for (i = 0 ; i < 16 ; i++)
- {
- addr[i] = addr[i] & pref[i];
- }
+ {
+ addr[i] = addr[i] & pref[i];
+ }
ipv6.Set (addr);
return ipv6;
}
@@ -421,9 +421,9 @@
buf[1] == 0x02 &&
buf[11] == 0x01 &&
buf[12] == 0xff)
- {
- return true;
- }
+ {
+ return true;
+ }
return false;
}
@@ -533,18 +533,18 @@
{
Ipv6Address linkLocal ("fe80::0");
if (!IsMulticast () && ((Ipv6Address*)this)->CombinePrefix (Ipv6Prefix (64)) == linkLocal)
- {
- return true;
- }
+ {
+ return true;
+ }
return false;
}
bool Ipv6Address::IsEqual (const Ipv6Address& other) const
{
if (!memcmp (m_address, other.m_address, 16))
- {
- return true;
- }
+ {
+ return true;
+ }
return false;
}
@@ -593,18 +593,18 @@
memset (m_prefix, 0xff, nb);
if (mod)
- {
- m_prefix[nb] = 0xff << (8-mod);
- }
+ {
+ m_prefix[nb] = 0xff << (8-mod);
+ }
if (nb < 16)
- {
- nb++;
- for (i = nb; i < 16 ; i++)
{
- m_prefix[i] = 0x00;
+ nb++;
+ for (i = nb; i < 16 ; i++)
+ {
+ m_prefix[i] = 0x00;
+ }
}
- }
}
Ipv6Prefix::Ipv6Prefix (Ipv6Prefix const& prefix)
@@ -633,12 +633,12 @@
/* a little bit ugly... */
for (i = 0 ; i < 16 ; i++)
- {
- if ((addrA[i] & m_prefix[i]) != (addrB[i] & m_prefix[i]))
{
- return false;
+ if ((addrA[i] & m_prefix[i]) != (addrB[i] & m_prefix[i]))
+ {
+ return false;
+ }
}
- }
return true;
}
@@ -691,15 +691,15 @@
uint8_t prefixLength = 0;
for(i = 0 ; i < 16 ; i++)
- {
- uint8_t mask = m_prefix[i];
+ {
+ uint8_t mask = m_prefix[i];
- while(mask != 0)
- {
- mask = mask << 1;
- prefixLength++;
+ while(mask != 0)
+ {
+ mask = mask << 1;
+ prefixLength++;
+ }
}
- }
return prefixLength;
}
@@ -707,9 +707,9 @@
bool Ipv6Prefix::IsEqual (const Ipv6Prefix& other) const
{
if (!memcmp (m_prefix, other.m_prefix, 16))
- {
- return true;
- }
+ {
+ return true;
+ }
return false;
}
--- a/src/node/ipv6-address.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-address.h Wed Dec 30 14:22:25 2009 +0100
@@ -43,253 +43,253 @@
*/
class Ipv6Address
{
- public :
- /**
- * \brief Default constructor.
- */
- Ipv6Address ();
+public :
+ /**
+ * \brief Default constructor.
+ */
+ Ipv6Address ();
- /**
- * \brief Constructs an Ipv6Address by parsing the input C-string.
- * \param address the C-string containing the IPv6 address (e.g. 2001:660:4701::1).
- */
- Ipv6Address (char const* address);
+ /**
+ * \brief Constructs an Ipv6Address by parsing the input C-string.
+ * \param address the C-string containing the IPv6 address (e.g. 2001:660:4701::1).
+ */
+ Ipv6Address (char const* address);
- /**
- * \brief Constructs an Ipv6Address by using the input 16 bytes.
- * \param address the 128-bit address
- * \warning the parameter must point on a 16 bytes integer array!
- */
- Ipv6Address (uint8_t address[16]);
+ /**
+ * \brief Constructs an Ipv6Address by using the input 16 bytes.
+ * \param address the 128-bit address
+ * \warning the parameter must point on a 16 bytes integer array!
+ */
+ Ipv6Address (uint8_t address[16]);
- /**
- * \brief Copy constructor.
- * \param addr Ipv6Address object
- */
- Ipv6Address (Ipv6Address const & addr);
+ /**
+ * \brief Copy constructor.
+ * \param addr Ipv6Address object
+ */
+ Ipv6Address (Ipv6Address const & addr);
- /**
- * \brief Copy constructor.
- * \param addr Ipv6Address pointer
- */
- Ipv6Address (Ipv6Address const* addr);
+ /**
+ * \brief Copy constructor.
+ * \param addr Ipv6Address pointer
+ */
+ Ipv6Address (Ipv6Address const* addr);
- /**
- * \brief Destructor.
- */
- ~Ipv6Address ();
+ /**
+ * \brief Destructor.
+ */
+ ~Ipv6Address ();
- /**
- * \brief Sets an Ipv6Address by parsing the input C-string.
- * \param address the C-string containing the IPv6 address (e.g. 2001:660:4701::1).
- */
- void Set (char const* address);
+ /**
+ * \brief Sets an Ipv6Address by parsing the input C-string.
+ * \param address the C-string containing the IPv6 address (e.g. 2001:660:4701::1).
+ */
+ void Set (char const* address);
- /**
- * \brief Set an Ipv6Address by using the input 16 bytes.
- *
- * \param address the 128-bit address
- * \warning the parameter must point on a 16 bytes integer array!
- */
- void Set (uint8_t address[16]);
+ /**
+ * \brief Set an Ipv6Address by using the input 16 bytes.
+ *
+ * \param address the 128-bit address
+ * \warning the parameter must point on a 16 bytes integer array!
+ */
+ void Set (uint8_t address[16]);
- /**
- * \brief Comparison operation between two Ipv6Addresses.
- *
- * \param other the IPv6 address to which to compare thisaddress
- * \return true if the addresses are equal, false otherwise
- */
- bool IsEqual (const Ipv6Address& other) const;
+ /**
+ * \brief Comparison operation between two Ipv6Addresses.
+ *
+ * \param other the IPv6 address to which to compare thisaddress
+ * \return true if the addresses are equal, false otherwise
+ */
+ bool IsEqual (const Ipv6Address& other) const;
- /**
- * \brief Serialize this address to a 16-byte buffer.
- * \param buf the output buffer to which this address gets overwritter with this
- * Ipv6Address
- */
- void Serialize (uint8_t buf[16]) const;
+ /**
+ * \brief Serialize this address to a 16-byte buffer.
+ * \param buf the output buffer to which this address gets overwritter with this
+ * Ipv6Address
+ */
+ void Serialize (uint8_t buf[16]) const;
- /**
- * \brief Deserialize this address.
- * \param buf buffer to read address from
- * \return an Ipv6Address
- */
- static Ipv6Address Deserialize (const uint8_t buf[16]);
+ /**
+ * \brief Deserialize this address.
+ * \param buf buffer to read address from
+ * \return an Ipv6Address
+ */
+ static Ipv6Address Deserialize (const uint8_t buf[16]);
- /**
- * \brief Make the solicited IPv6 address.
- * \param addr the IPv6 address
- * \return Solicited IPv6 address
- */
- static Ipv6Address MakeSolicitedAddress (Ipv6Address addr);
+ /**
+ * \brief Make the solicited IPv6 address.
+ * \param addr the IPv6 address
+ * \return Solicited IPv6 address
+ */
+ static Ipv6Address MakeSolicitedAddress (Ipv6Address addr);
- /**
- * \brief Make the autoconfigured IPv6 address with Mac48Address.
- * \param addr the MAC address (48 bits).
- * \param prefix the IPv6 prefix
- * \return autoconfigured IPv6 address
- */
- static Ipv6Address MakeAutoconfiguredAddress (Mac48Address addr, Ipv6Address prefix);
+ /**
+ * \brief Make the autoconfigured IPv6 address with Mac48Address.
+ * \param addr the MAC address (48 bits).
+ * \param prefix the IPv6 prefix
+ * \return autoconfigured IPv6 address
+ */
+ static Ipv6Address MakeAutoconfiguredAddress (Mac48Address addr, Ipv6Address prefix);
- /**
- * \brief Make the autoconfigured link-local IPv6 address with Mac48Address.
- * \param mac the MAC address (48 bits).
- * \return autoconfigured link-local IPv6 address
- */
- static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac48Address mac);
+ /**
+ * \brief Make the autoconfigured link-local IPv6 address with Mac48Address.
+ * \param mac the MAC address (48 bits).
+ * \return autoconfigured link-local IPv6 address
+ */
+ static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac48Address mac);
- /**
- * \brief Print this address to the given output stream.
- *
- * The print format is in the typical "2001:660:4701::1".
- * \param os the output stream to which this Ipv6Address is printed
- */
- void Print (std::ostream& os) const;
+ /**
+ * \brief Print this address to the given output stream.
+ *
+ * The print format is in the typical "2001:660:4701::1".
+ * \param os the output stream to which this Ipv6Address is printed
+ */
+ void Print (std::ostream& os) const;
- /**
- * \brief If the IPv6 address is localhost (::1).
- * \return true if localhost, false otherwise
- */
- bool IsLocalhost () const;
+ /**
+ * \brief If the IPv6 address is localhost (::1).
+ * \return true if localhost, false otherwise
+ */
+ bool IsLocalhost () const;
- /**
- * \brief If the IPv6 address is multicast (ff00::/8).
- * \return true if multicast, false otherwise
- */
- bool IsMulticast () const;
+ /**
+ * \brief If the IPv6 address is multicast (ff00::/8).
+ * \return true if multicast, false otherwise
+ */
+ bool IsMulticast () const;
- /**
- * \brief If the IPv6 address is "all nodes multicast" (ff02::1/8).
- * \return true if "all nodes multicast", false otherwise
- */
- bool IsAllNodesMulticast () const;
+ /**
+ * \brief If the IPv6 address is "all nodes multicast" (ff02::1/8).
+ * \return true if "all nodes multicast", false otherwise
+ */
+ bool IsAllNodesMulticast () const;
- /**
- * \brief If the IPv6 address is "all routers multicast" (ff02::2/8).
- * \return true if "all routers multicast", false otherwise
- */
- bool IsAllRoutersMulticast () const;
+ /**
+ * \brief If the IPv6 address is "all routers multicast" (ff02::2/8).
+ * \return true if "all routers multicast", false otherwise
+ */
+ bool IsAllRoutersMulticast () const;
- /**
- * \brief If the IPv6 address is "all hosts multicast" (ff02::3/8).
- * \return true if "all hosts multicast", false otherwise
- */
- bool IsAllHostsMulticast () const;
+ /**
+ * \brief If the IPv6 address is "all hosts multicast" (ff02::3/8).
+ * \return true if "all hosts multicast", false otherwise
+ */
+ bool IsAllHostsMulticast () const;
- /**
- * \brief If the IPv6 address is a link-local address (fe80::/64).
- * \return true if the address is link-local, false otherwise
- */
- bool IsLinkLocal () const;
+ /**
+ * \brief If the IPv6 address is a link-local address (fe80::/64).
+ * \return true if the address is link-local, false otherwise
+ */
+ bool IsLinkLocal () const;
- /**
- * \brief If the IPv6 address is a Solicited multicast address.
- * \return true if it is, false otherwise
- */
- bool IsSolicitedMulticast () const;
+ /**
+ * \brief If the IPv6 address is a Solicited multicast address.
+ * \return true if it is, false otherwise
+ */
+ bool IsSolicitedMulticast () const;
- /**
- * \brief If the IPv6 address is the "Any" address.
- * \return true if it is, false otherwise
- */
- bool IsAny () const;
+ /**
+ * \brief If the IPv6 address is the "Any" address.
+ * \return true if it is, false otherwise
+ */
+ bool IsAny () const;
- /**
- * \brief Combine this address with a prefix.
- * \param prefix a IPv6 prefix
- * \return an IPv6 address that is this address combined
- * (bitwise AND) with a prefix, yielding an IPv6 network address.
- */
- Ipv6Address CombinePrefix (Ipv6Prefix const & prefix);
+ /**
+ * \brief Combine this address with a prefix.
+ * \param prefix a IPv6 prefix
+ * \return an IPv6 address that is this address combined
+ * (bitwise AND) with a prefix, yielding an IPv6 network address.
+ */
+ Ipv6Address CombinePrefix (Ipv6Prefix const & prefix);
- /**
- * \brief If the Address matches the type.
- * \param address other address
- * \return true if the type matches, false otherwise
- */
- static bool IsMatchingType (const Address& address);
+ /**
+ * \brief If the Address matches the type.
+ * \param address other address
+ * \return true if the type matches, false otherwise
+ */
+ static bool IsMatchingType (const Address& address);
- /**
- * \brief Convert to Address object
- */
- operator Address () const;
+ /**
+ * \brief Convert to Address object
+ */
+ operator Address () const;
- /**
- * \brief Convert the Address object into an Ipv6Address ones.
- * \param address address to convert
- * \return an Ipv6Address
- */
- static Ipv6Address ConvertFrom (const Address& address);
+ /**
+ * \brief Convert the Address object into an Ipv6Address ones.
+ * \param address address to convert
+ * \return an Ipv6Address
+ */
+ static Ipv6Address ConvertFrom (const Address& address);
- /**
- * \brief Get the 0 (::) Ipv6Address.
- * \return the :: Ipv6Address representation
- */
- static Ipv6Address GetZero ();
+ /**
+ * \brief Get the 0 (::) Ipv6Address.
+ * \return the :: Ipv6Address representation
+ */
+ static Ipv6Address GetZero ();
- /**
- * \brief Get the "any" (::) Ipv6Address.
- * \return the "any" (::) Ipv6Address
- */
- static Ipv6Address GetAny ();
+ /**
+ * \brief Get the "any" (::) Ipv6Address.
+ * \return the "any" (::) Ipv6Address
+ */
+ static Ipv6Address GetAny ();
- /**
- * \brief Get the "all nodes multicast" address.
- * \return the "ff02::2/8" Ipv6Address representation
- */
- static Ipv6Address GetAllNodesMulticast ();
+ /**
+ * \brief Get the "all nodes multicast" address.
+ * \return the "ff02::2/8" Ipv6Address representation
+ */
+ static Ipv6Address GetAllNodesMulticast ();
- /**
- * \brief Get the "all routers multicast" address.
- * \return the "ff02::2/8" Ipv6Address representation
- */
- static Ipv6Address GetAllRoutersMulticast ();
+ /**
+ * \brief Get the "all routers multicast" address.
+ * \return the "ff02::2/8" Ipv6Address representation
+ */
+ static Ipv6Address GetAllRoutersMulticast ();
- /**
- * \brief Get the "all hosts multicast" address.
- * \return the "ff02::3/8" Ipv6Address representation
- */
- static Ipv6Address GetAllHostsMulticast ();
+ /**
+ * \brief Get the "all hosts multicast" address.
+ * \return the "ff02::3/8" Ipv6Address representation
+ */
+ static Ipv6Address GetAllHostsMulticast ();
- /**
- * \brief Get the loopback address.
- * \return the "::1/128" Ipv6Address representation.
- */
- static Ipv6Address GetLoopback ();
+ /**
+ * \brief Get the loopback address.
+ * \return the "::1/128" Ipv6Address representation.
+ */
+ static Ipv6Address GetLoopback ();
- /**
- * \brief Get the "all-1" IPv6 address (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
- * \return all-1 Ipv6Address representation
- */
- static Ipv6Address GetOnes ();
+ /**
+ * \brief Get the "all-1" IPv6 address (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
+ * \return all-1 Ipv6Address representation
+ */
+ static Ipv6Address GetOnes ();
- /**
- * \brief Get the bytes corresponding to the address.
- * \param buf buffer to store the data
- * \return bytes of the address
- */
- void GetBytes (uint8_t buf[16]) const;
+ /**
+ * \brief Get the bytes corresponding to the address.
+ * \param buf buffer to store the data
+ * \return bytes of the address
+ */
+ void GetBytes (uint8_t buf[16]) const;
- private:
- /**
- * \brief convert the IPv6Address object to an Address object.
- * \return the Address object corresponding to this object.
- */
- Address ConvertTo (void) const;
+private:
+ /**
+ * \brief convert the IPv6Address object to an Address object.
+ * \return the Address object corresponding to this object.
+ */
+ Address ConvertTo (void) const;
- /**
- * \brief Return the Type of address.
- * \return type of address
- */
- static uint8_t GetType (void);
+ /**
+ * \brief Return the Type of address.
+ * \return type of address
+ */
+ static uint8_t GetType (void);
- /**
- * \brief The address representation on 128 bits (16 bytes).
- */
- uint8_t m_address[16];
+ /**
+ * \brief The address representation on 128 bits (16 bytes).
+ */
+ uint8_t m_address[16];
- friend bool operator == (Ipv6Address const &a, Ipv6Address const &b);
- friend bool operator != (Ipv6Address const &a, Ipv6Address const &b);
- friend bool operator < (Ipv6Address const &a, Ipv6Address const &b);
+ friend bool operator == (Ipv6Address const &a, Ipv6Address const &b);
+ friend bool operator != (Ipv6Address const &a, Ipv6Address const &b);
+ friend bool operator < (Ipv6Address const &a, Ipv6Address const &b);
};
/**
@@ -300,106 +300,106 @@
*/
class Ipv6Prefix
{
- public:
- /**
- * \brief Default constructor.
- */
- Ipv6Prefix ();
+public:
+ /**
+ * \brief Default constructor.
+ */
+ Ipv6Prefix ();
- /**
- * \brief Constructs an Ipv6Prefix by using the input 16 bytes.
- * \param prefix the 128-bit prefix
- */
- Ipv6Prefix (uint8_t prefix[16]);
+ /**
+ * \brief Constructs an Ipv6Prefix by using the input 16 bytes.
+ * \param prefix the 128-bit prefix
+ */
+ Ipv6Prefix (uint8_t prefix[16]);
- /**
- * \brief Constructs an Ipv6Prefix by using the input string.
- * \param prefix the 128-bit prefix
- */
- Ipv6Prefix (char const* prefix);
+ /**
+ * \brief Constructs an Ipv6Prefix by using the input string.
+ * \param prefix the 128-bit prefix
+ */
+ Ipv6Prefix (char const* prefix);
- /**
- * \brief Constructs an Ipv6Prefix by using the input number of bits.
- * \param prefix number of bits of the prefix (0 - 128)
- * \note A valid number of bits is between 0 and 128).
- */
- Ipv6Prefix (uint8_t prefix);
+ /**
+ * \brief Constructs an Ipv6Prefix by using the input number of bits.
+ * \param prefix number of bits of the prefix (0 - 128)
+ * \note A valid number of bits is between 0 and 128).
+ */
+ Ipv6Prefix (uint8_t prefix);
- /**
- * \brief Copy constructor.
- * \param prefix Ipv6Prefix object
- */
- Ipv6Prefix (Ipv6Prefix const& prefix);
+ /**
+ * \brief Copy constructor.
+ * \param prefix Ipv6Prefix object
+ */
+ Ipv6Prefix (Ipv6Prefix const& prefix);
- /**
- * \brief Copy constructor.
- * \param prefix Ipv6Prefix pointer
- */
- Ipv6Prefix (Ipv6Prefix const* prefix);
+ /**
+ * \brief Copy constructor.
+ * \param prefix Ipv6Prefix pointer
+ */
+ Ipv6Prefix (Ipv6Prefix const* prefix);
- /**
- * \brief Destructor.
- */
- ~Ipv6Prefix ();
+ /**
+ * \brief Destructor.
+ */
+ ~Ipv6Prefix ();
- /**
- * \brief If the Address match the type.
- * \param a a first address
- * \param b a second address
- * \return true if the type match, false otherwise
- */
- bool IsMatch (Ipv6Address a, Ipv6Address b) const;
+ /**
+ * \brief If the Address match the type.
+ * \param a a first address
+ * \param b a second address
+ * \return true if the type match, false otherwise
+ */
+ bool IsMatch (Ipv6Address a, Ipv6Address b) const;
- /**
- * \brief Get the bytes corresponding to the prefix.
- * \param buf buffer to store the data
- */
- void GetBytes (uint8_t buf[16]) const;
+ /**
+ * \brief Get the bytes corresponding to the prefix.
+ * \param buf buffer to store the data
+ */
+ void GetBytes (uint8_t buf[16]) const;
- /**
- * \brief Get prefix length.
- * \return prefix length
- */
- uint8_t GetPrefixLength () const;
+ /**
+ * \brief Get prefix length.
+ * \return prefix length
+ */
+ uint8_t GetPrefixLength () const;
- /**
- * \brief Comparison operation between two Ipv6Prefix.
- * \param other the IPv6 prefix to which to compare this prefix
- * \return true if the prefixes are equal, false otherwise
- */
- bool IsEqual (const Ipv6Prefix& other) const;
+ /**
+ * \brief Comparison operation between two Ipv6Prefix.
+ * \param other the IPv6 prefix to which to compare this prefix
+ * \return true if the prefixes are equal, false otherwise
+ */
+ bool IsEqual (const Ipv6Prefix& other) const;
- /**
- * \brief Print this address to the given output stream.
- *
- * The print format is in the typicall "2001:660:4701::1".
- * \param os the output stream to which this Ipv6Address is printed
- */
- void Print (std::ostream &os) const;
+ /**
+ * \brief Print this address to the given output stream.
+ *
+ * The print format is in the typicall "2001:660:4701::1".
+ * \param os the output stream to which this Ipv6Address is printed
+ */
+ void Print (std::ostream &os) const;
- /**
- * \brief Get the loopback prefix ( /128).
- * \return a Ipv6Prefix corresponding to loopback prefix
- */
- static Ipv6Prefix GetLoopback ();
+ /**
+ * \brief Get the loopback prefix ( /128).
+ * \return a Ipv6Prefix corresponding to loopback prefix
+ */
+ static Ipv6Prefix GetLoopback ();
- /**
- * \brief Get the "all-1" IPv6 mask (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
- * \return /128 Ipv6Prefix representation
- */
- static Ipv6Prefix GetOnes ();
+ /**
+ * \brief Get the "all-1" IPv6 mask (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
+ * \return /128 Ipv6Prefix representation
+ */
+ static Ipv6Prefix GetOnes ();
- /**
- * \brief Get the zero prefix ( /0).
- * \return an Ipv6Prefix
- */
- static Ipv6Prefix GetZero ();
+ /**
+ * \brief Get the zero prefix ( /0).
+ * \return an Ipv6Prefix
+ */
+ static Ipv6Prefix GetZero ();
- private:
- /**
- * \brief The prefix representation.
- */
- uint8_t m_prefix[16];
+private:
+ /**
+ * \brief The prefix representation.
+ */
+ uint8_t m_prefix[16];
};
/**
@@ -440,12 +440,12 @@
*/
class Ipv6AddressHash : public std::unary_function<Ipv6Address, size_t>
{
- public:
- /**
- * \brief Unary operator to hash IPv6 address.
- * \param x IPv6 address to hash
- */
- size_t operator () (Ipv6Address const &x) const;
+public:
+ /**
+ * \brief Unary operator to hash IPv6 address.
+ * \param x IPv6 address to hash
+ */
+ size_t operator () (Ipv6Address const &x) const;
};
bool operator == (Ipv6Prefix const &a, Ipv6Prefix const &b);
--- a/src/node/ipv6-header.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-header.h Wed Dec 30 14:22:25 2009 +0100
@@ -32,197 +32,197 @@
*/
class Ipv6Header : public Header
{
- public:
- /**
- * \enum NextHeader_e
- * \brief IPv6 next-header value
- */
- enum NextHeader_e
- {
- IPV6_EXT_HOP_BY_HOP = 0,
- IPV6_IPV4 = 4,
- IPV6_TCP = 6,
- IPV6_UDP = 17,
- IPV6_IPV6 = 41,
- IPV6_EXT_ROUTING = 43,
- IPV6_EXT_FRAGMENTATION = 44,
- IPV6_EXT_CONFIDENTIALITY = 50,
- IPV6_EXT_AUTHENTIFICATION = 51,
- IPV6_ICMPV6 = 58,
- IPV6_EXT_END = 59,
- IPV6_EXT_DESTINATION = 60,
- IPV6_SCTP = 135,
- IPV6_EXT_MOBILITY = 135,
- IPV6_UDP_LITE = 136,
- };
+public:
+ /**
+ * \enum NextHeader_e
+ * \brief IPv6 next-header value
+ */
+ enum NextHeader_e
+ {
+ IPV6_EXT_HOP_BY_HOP = 0,
+ IPV6_IPV4 = 4,
+ IPV6_TCP = 6,
+ IPV6_UDP = 17,
+ IPV6_IPV6 = 41,
+ IPV6_EXT_ROUTING = 43,
+ IPV6_EXT_FRAGMENTATION = 44,
+ IPV6_EXT_CONFIDENTIALITY = 50,
+ IPV6_EXT_AUTHENTIFICATION = 51,
+ IPV6_ICMPV6 = 58,
+ IPV6_EXT_END = 59,
+ IPV6_EXT_DESTINATION = 60,
+ IPV6_SCTP = 135,
+ IPV6_EXT_MOBILITY = 135,
+ IPV6_UDP_LITE = 136,
+ };
- /**
- * \brief Get the type identifier.
- * \return type identifier
- */
- static TypeId GetTypeId (void);
+ /**
+ * \brief Get the type identifier.
+ * \return type identifier
+ */
+ static TypeId GetTypeId (void);
- /**
- * \brief Return the instance type identifier.
- * \return instance type ID
- */
- virtual TypeId GetInstanceTypeId (void) const;
+ /**
+ * \brief Return the instance type identifier.
+ * \return instance type ID
+ */
+ virtual TypeId GetInstanceTypeId (void) const;
- /**
- * \brief Constructor.
- */
- Ipv6Header (void);
+ /**
+ * \brief Constructor.
+ */
+ Ipv6Header (void);
- /**
- * \brief Set the "Traffic class" field.
- * \param traffic the 8-bit value
- */
- void SetTrafficClass (uint8_t traffic);
+ /**
+ * \brief Set the "Traffic class" field.
+ * \param traffic the 8-bit value
+ */
+ void SetTrafficClass (uint8_t traffic);
- /**
- * \brief Get the "Traffic class" field.
- * \return the traffic value
- */
- uint8_t GetTrafficClass (void) const;
+ /**
+ * \brief Get the "Traffic class" field.
+ * \return the traffic value
+ */
+ uint8_t GetTrafficClass (void) const;
- /**
- * \brief Set the "Flow label" field.
- * \param flow the 20-bit value
- */
- void SetFlowLabel (uint32_t flow);
+ /**
+ * \brief Set the "Flow label" field.
+ * \param flow the 20-bit value
+ */
+ void SetFlowLabel (uint32_t flow);
- /**
- * \brief Get the "Flow label" field.
- * \return the flow label value
- */
- uint32_t GetFlowLabel (void) const;
+ /**
+ * \brief Get the "Flow label" field.
+ * \return the flow label value
+ */
+ uint32_t GetFlowLabel (void) const;
- /**
- * \brief Set the "Payload length" field.
- * \param len the length of the payload in bytes
- */
- void SetPayloadLength (uint16_t len);
+ /**
+ * \brief Set the "Payload length" field.
+ * \param len the length of the payload in bytes
+ */
+ void SetPayloadLength (uint16_t len);
- /**
- * \brief Get the "Payload length" field.
- * \return the payload length
- */
- uint16_t GetPayloadLength (void) const;
+ /**
+ * \brief Get the "Payload length" field.
+ * \return the payload length
+ */
+ uint16_t GetPayloadLength (void) const;
- /**
- * \brief Set the "Next header" field.
- * \param next the next header number
- */
- void SetNextHeader (uint8_t next);
+ /**
+ * \brief Set the "Next header" field.
+ * \param next the next header number
+ */
+ void SetNextHeader (uint8_t next);
- /**
- * \brief Get the next header.
- * \return the next header number
- */
- uint8_t GetNextHeader (void) const;
+ /**
+ * \brief Get the next header.
+ * \return the next header number
+ */
+ uint8_t GetNextHeader (void) const;
- /**
- * \brief Set the "Hop limit" field (TTL).
- * \param limit the 8-bit value
- */
- void SetHopLimit (uint8_t limit);
+ /**
+ * \brief Set the "Hop limit" field (TTL).
+ * \param limit the 8-bit value
+ */
+ void SetHopLimit (uint8_t limit);
- /**
- * \brief Get the "Hop limit" field (TTL).
- * \return the hop limit value
- */
- uint8_t GetHopLimit (void) const;
+ /**
+ * \brief Get the "Hop limit" field (TTL).
+ * \return the hop limit value
+ */
+ uint8_t GetHopLimit (void) const;
- /**
- * \brief Set the "Source address" field.
- * \param src the source address
- */
- void SetSourceAddress (Ipv6Address src);
+ /**
+ * \brief Set the "Source address" field.
+ * \param src the source address
+ */
+ void SetSourceAddress (Ipv6Address src);
- /**
- * \brief Get the "Source address" field.
- * \return the source address
- */
- Ipv6Address GetSourceAddress (void) const;
+ /**
+ * \brief Get the "Source address" field.
+ * \return the source address
+ */
+ Ipv6Address GetSourceAddress (void) const;
- /**
- * \brief Set the "Destination address" field.
- * \param dst the destination address
- */
- void SetDestinationAddress (Ipv6Address dst);
+ /**
+ * \brief Set the "Destination address" field.
+ * \param dst the destination address
+ */
+ void SetDestinationAddress (Ipv6Address dst);
- /**
- * \brief Get the "Destination address" field.
- * \return the destination address
- */
- Ipv6Address GetDestinationAddress (void) const;
+ /**
+ * \brief Get the "Destination address" field.
+ * \return the destination address
+ */
+ Ipv6Address GetDestinationAddress (void) const;
- /**
- * \brief Print some informations about the packet.
- * \param os output stream
- * \return info about this packet
- */
- virtual void Print (std::ostream& os) const;
+ /**
+ * \brief Print some informations about the packet.
+ * \param os output stream
+ * \return info about this packet
+ */
+ virtual void Print (std::ostream& os) const;
- /**
- * \brief Get the serialized size of the packet.
- * \return size
- */
- virtual uint32_t GetSerializedSize (void) const;
+ /**
+ * \brief Get the serialized size of the packet.
+ * \return size
+ */
+ virtual uint32_t GetSerializedSize (void) const;
- /**
- * \brief Serialize the packet.
- * \param start Buffer iterator
- */
- virtual void Serialize (Buffer::Iterator start) const;
+ /**
+ * \brief Serialize the packet.
+ * \param start Buffer iterator
+ */
+ virtual void Serialize (Buffer::Iterator start) const;
- /**
- * \brief Deserialize the packet.
- * \param start Buffer iterator
- * \return size of the packet
- */
- virtual uint32_t Deserialize (Buffer::Iterator start);
+ /**
+ * \brief Deserialize the packet.
+ * \param start Buffer iterator
+ * \return size of the packet
+ */
+ virtual uint32_t Deserialize (Buffer::Iterator start);
- private:
- /**
- * \brief The version (always equal to 6).
- */
- uint32_t m_version : 4;
- /**
- * \brief The traffic class.
- */
- uint32_t m_trafficClass : 8;
+private:
+ /**
+ * \brief The version (always equal to 6).
+ */
+ uint32_t m_version : 4;
+ /**
+ * \brief The traffic class.
+ */
+ uint32_t m_trafficClass : 8;
- /**
- * \brief The flow label.
- * \note This is 20-bit value.
- */
- uint32_t m_flowLabel : 20;
+ /**
+ * \brief The flow label.
+ * \note This is 20-bit value.
+ */
+ uint32_t m_flowLabel : 20;
- /**
- * \brief The payload length.
- */
- uint16_t m_payloadLength;
+ /**
+ * \brief The payload length.
+ */
+ uint16_t m_payloadLength;
- /**
- * \brief The Next header number.
- */
- uint8_t m_nextHeader;
+ /**
+ * \brief The Next header number.
+ */
+ uint8_t m_nextHeader;
- /**
- * \brief The Hop limit value.
- */
- uint8_t m_hopLimit;
+ /**
+ * \brief The Hop limit value.
+ */
+ uint8_t m_hopLimit;
- /**
- * \brief The source address.
- */
- Ipv6Address m_sourceAddress;
+ /**
+ * \brief The source address.
+ */
+ Ipv6Address m_sourceAddress;
- /**
- * \brief The destination address.
- */
- Ipv6Address m_destinationAddress;
+ /**
+ * \brief The destination address.
+ */
+ Ipv6Address m_destinationAddress;
};
} /* namespace ns3 */
--- a/src/node/ipv6-interface-address.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-interface-address.cc Wed Dec 30 14:22:25 2009 +0100
@@ -83,21 +83,21 @@
m_address = address;
if (address.IsLocalhost ())
- {
- m_scope = HOST;
- /* localhost address is always /128 prefix */
- m_prefix = Ipv6Prefix (128);
- }
+ {
+ m_scope = HOST;
+ /* localhost address is always /128 prefix */
+ m_prefix = Ipv6Prefix (128);
+ }
if (address.IsLinkLocal ())
- {
- m_scope = LINKLOCAL;
- /* link-local address is always /64 prefix */
- m_prefix = Ipv6Prefix (64);
- }
+ {
+ m_scope = LINKLOCAL;
+ /* link-local address is always /64 prefix */
+ m_prefix = Ipv6Prefix (64);
+ }
else
- {
- m_scope = GLOBAL;
- }
+ {
+ m_scope = GLOBAL;
+ }
}
Ipv6Prefix Ipv6InterfaceAddress::GetPrefix () const
--- a/src/node/ipv6-interface-address.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-interface-address.h Wed Dec 30 14:22:25 2009 +0100
@@ -35,157 +35,157 @@
*/
class Ipv6InterfaceAddress
{
- public:
- /**
- * \enum State_e
- * \brief State of an address associated with an interface.
- */
- enum State_e
- {
- TENTATIVE, /**< Address is tentative, no packet can be sent unless DAD finished */
- DEPRECATED, /**< Address is deprecated and should not be used */
- PREFERRED, /**< Preferred address */
- PERMANENT, /**< Permanent address */
- HOMEADDRESS, /**< Address is a HomeAddress */
- TENTATIVE_OPTIMISTIC, /**< Address is tentative but we are optimistic so we can send packet even if DAD is not yet finished */
- INVALID, /**< Invalid state (after a DAD failed) */
- };
+public:
+ /**
+ * \enum State_e
+ * \brief State of an address associated with an interface.
+ */
+ enum State_e
+ {
+ TENTATIVE, /**< Address is tentative, no packet can be sent unless DAD finished */
+ DEPRECATED, /**< Address is deprecated and should not be used */
+ PREFERRED, /**< Preferred address */
+ PERMANENT, /**< Permanent address */
+ HOMEADDRESS, /**< Address is a HomeAddress */
+ TENTATIVE_OPTIMISTIC, /**< Address is tentative but we are optimistic so we can send packet even if DAD is not yet finished */
+ INVALID, /**< Invalid state (after a DAD failed) */
+ };
- /**
- * \enum Scope_e
- * \brief Scope of address.
- */
- enum Scope_e
- {
- HOST, /**< Localhost (::1/128) */
- LINKLOCAL, /**< Link-local address (fe80::/64) */
- GLOBAL, /**< Global address (2000::/3) */
- };
+ /**
+ * \enum Scope_e
+ * \brief Scope of address.
+ */
+ enum Scope_e
+ {
+ HOST, /**< Localhost (::1/128) */
+ LINKLOCAL, /**< Link-local address (fe80::/64) */
+ GLOBAL, /**< Global address (2000::/3) */
+ };
+
+ /**
+ * \brief Default constructor.
+ */
+ Ipv6InterfaceAddress ();
- /**
- * \brief Default constructor.
- */
- Ipv6InterfaceAddress ();
+ /**
+ * \brief Constructor. Prefix is 64 by default.
+ * \param address the IPv6 address to set
+ */
+ Ipv6InterfaceAddress (Ipv6Address address);
- /**
- * \brief Constructor. Prefix is 64 by default.
- * \param address the IPv6 address to set
- */
- Ipv6InterfaceAddress (Ipv6Address address);
+ /**
+ * \brief Constructor.
+ * \param address IPv6 address to set
+ * \param prefix IPv6 prefix
+ */
+ Ipv6InterfaceAddress (Ipv6Address address, Ipv6Prefix prefix);
- /**
- * \brief Constructor.
- * \param address IPv6 address to set
- * \param prefix IPv6 prefix
- */
- Ipv6InterfaceAddress (Ipv6Address address, Ipv6Prefix prefix);
+ /**
+ * \brief Copy constructor.
+ * \param o object to copy
+ */
+ Ipv6InterfaceAddress (const Ipv6InterfaceAddress& o);
- /**
- * \brief Copy constructor.
- * \param o object to copy
- */
- Ipv6InterfaceAddress (const Ipv6InterfaceAddress& o);
-
- /**
- * \brief Destructor.
- */
- ~Ipv6InterfaceAddress ();
+ /**
+ * \brief Destructor.
+ */
+ ~Ipv6InterfaceAddress ();
+
+ /**
+ * \brief Set IPv6 address (and scope).
+ * \param address IPv6 address to set
+ */
+ void SetAddress (Ipv6Address address);
- /**
- * \brief Set IPv6 address (and scope).
- * \param address IPv6 address to set
- */
- void SetAddress (Ipv6Address address);
+ /**
+ * \brief Get the IPv6 address.
+ * \return IPv6 address
+ */
+ Ipv6Address GetAddress () const;
- /**
- * \brief Get the IPv6 address.
- * \return IPv6 address
- */
- Ipv6Address GetAddress () const;
+ /**
+ * \brief Get the IPv6 prefix.
+ * \return IPv6 prefix
+ */
+ Ipv6Prefix GetPrefix () const;
- /**
- * \brief Get the IPv6 prefix.
- * \return IPv6 prefix
- */
- Ipv6Prefix GetPrefix () const;
+ /**
+ * \brief Set the state.
+ * \param state the state
+ */
+ void SetState (Ipv6InterfaceAddress::State_e state);
- /**
- * \brief Set the state.
- * \param state the state
- */
- void SetState (Ipv6InterfaceAddress::State_e state);
+ /**
+ * \brief Get the address state.
+ * \return address state
+ */
+ Ipv6InterfaceAddress::State_e GetState () const;
- /**
- * \brief Get the address state.
- * \return address state
- */
- Ipv6InterfaceAddress::State_e GetState () const;
+ /**
+ * \brief Set the scope.
+ * \param scope the scope of address
+ */
+ void SetScope (Ipv6InterfaceAddress::Scope_e scope);
- /**
- * \brief Set the scope.
- * \param scope the scope of address
- */
- void SetScope (Ipv6InterfaceAddress::Scope_e scope);
-
- /**
- * \brief Get address scope.
- * \return scope
- */
- Ipv6InterfaceAddress::Scope_e GetScope () const;
+ /**
+ * \brief Get address scope.
+ * \return scope
+ */
+ Ipv6InterfaceAddress::Scope_e GetScope () const;
- /**
- * \brief Set the latest DAD probe packet UID.
- * \param uid packet uid
- */
- void SetNsDadUid (uint32_t uid);
+ /**
+ * \brief Set the latest DAD probe packet UID.
+ * \param uid packet uid
+ */
+ void SetNsDadUid (uint32_t uid);
- /**
- * \brief Get the latest DAD probe packet UID.
- * \return uid
- */
- uint32_t GetNsDadUid () const;
+ /**
+ * \brief Get the latest DAD probe packet UID.
+ * \return uid
+ */
+ uint32_t GetNsDadUid () const;
#if 0
- /**
- * \brief Start the DAD timer.
- * \param interface interface
- */
- void StartDadTimer (Ptr<Ipv6Interface> interface);
+ /**
+ * \brief Start the DAD timer.
+ * \param interface interface
+ */
+ void StartDadTimer (Ptr<Ipv6Interface> interface);
- /**
- * \brief Stop the DAD timer.
- */
- void StopDadTimer ();
+ /**
+ * \brief Stop the DAD timer.
+ */
+ void StopDadTimer ();
#endif
- private:
- /**
- * \brief The IPv6 address.
- */
- Ipv6Address m_address;
+private:
+ /**
+ * \brief The IPv6 address.
+ */
+ Ipv6Address m_address;
- /**
- * \brief The IPv6 prefix.
- */
- Ipv6Prefix m_prefix;
+ /**
+ * \brief The IPv6 prefix.
+ */
+ Ipv6Prefix m_prefix;
- /**
- * \brief State of the address.
- */
- State_e m_state;
+ /**
+ * \brief State of the address.
+ */
+ State_e m_state;
- /**
- * \brief Scope of the address.
- */
- Scope_e m_scope;
+ /**
+ * \brief Scope of the address.
+ */
+ Scope_e m_scope;
- friend bool operator == (Ipv6InterfaceAddress const& a, Ipv6InterfaceAddress const& b);
- friend bool operator != (Ipv6InterfaceAddress const& a, Ipv6InterfaceAddress const& b);
+ friend bool operator == (Ipv6InterfaceAddress const& a, Ipv6InterfaceAddress const& b);
+ friend bool operator != (Ipv6InterfaceAddress const& a, Ipv6InterfaceAddress const& b);
- /**
- * \brief Last DAD probe packet UID.
- */
- uint32_t m_nsDadUid;
+ /**
+ * \brief Last DAD probe packet UID.
+ */
+ uint32_t m_nsDadUid;
};
std::ostream& operator<< (std::ostream& os, const Ipv6InterfaceAddress &addr);
@@ -194,13 +194,13 @@
inline bool operator == (const Ipv6InterfaceAddress& a, const Ipv6InterfaceAddress& b)
{
return (a.m_address == b.m_address && a.m_prefix == b.m_prefix &&
- a.m_state == b.m_state && a.m_scope == b.m_scope);
+ a.m_state == b.m_state && a.m_scope == b.m_scope);
}
inline bool operator != (const Ipv6InterfaceAddress& a, const Ipv6InterfaceAddress& b)
{
return (a.m_address != b.m_address || a.m_prefix != b.m_prefix ||
- a.m_state != b.m_state || a.m_scope != b.m_scope);
+ a.m_state != b.m_state || a.m_scope != b.m_scope);
}
} /* namespace ns3 */
--- a/src/node/ipv6-raw-socket-factory.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-raw-socket-factory.h Wed Dec 30 14:22:25 2009 +0100
@@ -38,12 +38,12 @@
*/
class Ipv6RawSocketFactory : public SocketFactory
{
- public:
- /**
- * \brief Get the type ID of this class.
- * \return type ID
- */
- static TypeId GetTypeId (void);
+public:
+ /**
+ * \brief Get the type ID of this class.
+ * \return type ID
+ */
+ static TypeId GetTypeId (void);
};
} // namespace ns3
--- a/src/node/ipv6-route.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-route.cc Wed Dec 30 14:22:25 2009 +0100
@@ -39,8 +39,7 @@
m_dest = dest;
}
-Ipv6Address
-Ipv6Route::GetDestination () const
+Ipv6Address Ipv6Route::GetDestination () const
{
return m_dest;
}
@@ -77,8 +76,8 @@
std::ostream& operator<< (std::ostream& os, Ipv6Route const& route)
{
- os << "source=" << route.GetSource () << " dest="<< route.GetDestination () <<" gw=" << route.GetGateway ();
- return os;
+ os << "source=" << route.GetSource () << " dest="<< route.GetDestination () <<" gw=" << route.GetGateway ();
+ return os;
}
Ipv6MulticastRoute::Ipv6MulticastRoute ()
@@ -87,9 +86,9 @@
/* Initialize array to MAX_TTL, which means that all interfaces are "off" */
for (uint32_t i = 0; i < MAX_INTERFACES; i++)
- {
- m_ttls.push_back (initial_ttl);
- }
+ {
+ m_ttls.push_back (initial_ttl);
+ }
}
Ipv6MulticastRoute::~Ipv6MulticastRoute ()
@@ -138,8 +137,8 @@
std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoute const& route)
{
- os << "origin=" << route.GetOrigin () << " group="<< route.GetGroup () <<" parent=" << route.GetParent ();
- return os;
+ os << "origin=" << route.GetOrigin () << " group="<< route.GetGroup () <<" parent=" << route.GetParent ();
+ return os;
}
} /* namespace ns3 */
--- a/src/node/ipv6-route.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-route.h Wed Dec 30 14:22:25 2009 +0100
@@ -41,85 +41,85 @@
*/
class Ipv6Route : public SimpleRefCount<Ipv6Route>
{
- public:
- /**
- * \brief Constructor.
- */
- Ipv6Route ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Ipv6Route ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6Route ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6Route ();
- /**
- * \brief Set destination address.
- * \param dest IPv6 destination address
- */
- void SetDestination (Ipv6Address dest);
+ /**
+ * \brief Set destination address.
+ * \param dest IPv6 destination address
+ */
+ void SetDestination (Ipv6Address dest);
- /**
- * \brief Get destination address.
- * \return destination address
- */
- Ipv6Address GetDestination () const;
+ /**
+ * \brief Get destination address.
+ * \return destination address
+ */
+ Ipv6Address GetDestination () const;
- /**
- * \brief Set source address.
- * \param src IPv6 source address
- */
- void SetSource (Ipv6Address src);
+ /**
+ * \brief Set source address.
+ * \param src IPv6 source address
+ */
+ void SetSource (Ipv6Address src);
- /**
- * \brief Get source address.
- * \return source address
- */
- Ipv6Address GetSource () const;
+ /**
+ * \brief Get source address.
+ * \return source address
+ */
+ Ipv6Address GetSource () const;
- /**
- * \brief Set gateway address.
- * \param gw IPv6 gateway address
- */
- void SetGateway (Ipv6Address gw);
+ /**
+ * \brief Set gateway address.
+ * \param gw IPv6 gateway address
+ */
+ void SetGateway (Ipv6Address gw);
- /**
- * \brief Get gateway address.
- * \return gateway address
- */
- Ipv6Address GetGateway () const;
+ /**
+ * \brief Get gateway address.
+ * \return gateway address
+ */
+ Ipv6Address GetGateway () const;
- /**
- * \brief Set output device for outgoing packets.
- * \param outputDevice output device
- */
- void SetOutputDevice (Ptr<NetDevice> outputDevice);
+ /**
+ * \brief Set output device for outgoing packets.
+ * \param outputDevice output device
+ */
+ void SetOutputDevice (Ptr<NetDevice> outputDevice);
- /**
- * \brief Get output device.
- * \return output device
- */
- Ptr<NetDevice> GetOutputDevice () const;
+ /**
+ * \brief Get output device.
+ * \return output device
+ */
+ Ptr<NetDevice> GetOutputDevice () const;
- private:
- /**
- * \brief Destination address.
- */
- Ipv6Address m_dest;
+private:
+ /**
+ * \brief Destination address.
+ */
+ Ipv6Address m_dest;
- /**
- * \brief source address.
- */
- Ipv6Address m_source;
+ /**
+ * \brief source address.
+ */
+ Ipv6Address m_source;
- /**
- * \brief Gateway address.
- */
- Ipv6Address m_gateway;
+ /**
+ * \brief Gateway address.
+ */
+ Ipv6Address m_gateway;
- /**
- * \brief Output device.
- */
- Ptr<NetDevice> m_outputDevice;
+ /**
+ * \brief Output device.
+ */
+ Ptr<NetDevice> m_outputDevice;
};
std::ostream& operator<< (std::ostream& os, Ipv6Route const& route);
@@ -131,97 +131,97 @@
*/
class Ipv6MulticastRoute : public SimpleRefCount<Ipv6MulticastRoute>
{
- public:
- /**
- * \brief Maximum number of multicast interfaces on a router.
- */
- static const uint32_t MAX_INTERFACES = 16;
+public:
+ /**
+ * \brief Maximum number of multicast interfaces on a router.
+ */
+ static const uint32_t MAX_INTERFACES = 16;
- /**
- * \brief Maximum Time-To-Live (TTL).
- */
- static const uint32_t MAX_TTL = 255;
+ /**
+ * \brief Maximum Time-To-Live (TTL).
+ */
+ static const uint32_t MAX_TTL = 255;
- /**
- * \brief Constructor.
- */
- Ipv6MulticastRoute ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6MulticastRoute ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6MulticastRoute ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6MulticastRoute ();
- /**
- * \brief Set IPv6 group.
- * \param group Ipv6Address of the multicast group
- */
- void SetGroup (const Ipv6Address group);
+ /**
+ * \brief Set IPv6 group.
+ * \param group Ipv6Address of the multicast group
+ */
+ void SetGroup (const Ipv6Address group);
- /**
- * \brief Get IPv6 group.
- * \return Ipv6Address of the multicast group
- */
- Ipv6Address GetGroup (void) const;
+ /**
+ * \brief Get IPv6 group.
+ * \return Ipv6Address of the multicast group
+ */
+ Ipv6Address GetGroup (void) const;
- /**
- * \brief Set origin address.
- * \param origin Ipv6Address of the origin address
- */
- void SetOrigin (const Ipv6Address origin);
+ /**
+ * \brief Set origin address.
+ * \param origin Ipv6Address of the origin address
+ */
+ void SetOrigin (const Ipv6Address origin);
- /**
- * \brief Get source address.
- * \return Ipv6Address of the origin address
- */
- Ipv6Address GetOrigin (void) const;
+ /**
+ * \brief Get source address.
+ * \return Ipv6Address of the origin address
+ */
+ Ipv6Address GetOrigin (void) const;
- /**
- * \brief Set parent for this route.
- * \param iif Parent (input interface) for this route
- */
- void SetParent (uint32_t iif);
+ /**
+ * \brief Set parent for this route.
+ * \param iif Parent (input interface) for this route
+ */
+ void SetParent (uint32_t iif);
- /**
- * \brief Get parent for this route.
- * \return Parent (input interface) for this route
- */
- uint32_t GetParent (void) const;
+ /**
+ * \brief Get parent for this route.
+ * \return Parent (input interface) for this route
+ */
+ uint32_t GetParent (void) const;
- /**
- * \brief set output TTL for this route.
- * \param oif Outgoing interface index
- * \param ttl time-to-live for this route
- */
- void SetOutputTtl (uint32_t oif, uint32_t ttl);
+ /**
+ * \brief set output TTL for this route.
+ * \param oif Outgoing interface index
+ * \param ttl time-to-live for this route
+ */
+ void SetOutputTtl (uint32_t oif, uint32_t ttl);
- /**
- * \brief Get output TTL for this route.
- * \param oif outgoing interface
- * \return TTL for this route
- */
- uint32_t GetOutputTtl (uint32_t oif) const;
+ /**
+ * \brief Get output TTL for this route.
+ * \param oif outgoing interface
+ * \return TTL for this route
+ */
+ uint32_t GetOutputTtl (uint32_t oif) const;
- private:
- /**
- * \brief IPv6 group.
- */
- Ipv6Address m_group;
+private:
+ /**
+ * \brief IPv6 group.
+ */
+ Ipv6Address m_group;
- /**
- * \brief IPv6 origin (source).
- */
- Ipv6Address m_origin;
+ /**
+ * \brief IPv6 origin (source).
+ */
+ Ipv6Address m_origin;
- /**
- * \brief Source interface.
- */
- uint32_t m_parent;
+ /**
+ * \brief Source interface.
+ */
+ uint32_t m_parent;
- /**
- * \brief TTLs.
- */
- std::vector<uint32_t> m_ttls;
+ /**
+ * \brief TTLs.
+ */
+ std::vector<uint32_t> m_ttls;
};
std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoute const& route);
--- a/src/node/ipv6-routing-protocol.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/node/ipv6-routing-protocol.h Wed Dec 30 14:22:25 2009 +0100
@@ -59,7 +59,7 @@
typedef Callback<void, Ptr<Ipv6MulticastRoute>, Ptr<const Packet>, const Ipv6Header &> MulticastForwardCallback;
typedef Callback<void, Ptr<const Packet>, const Ipv6Header &, uint32_t > LocalDeliverCallback;
typedef Callback<void, Ptr<const Packet>, const Ipv6Header &, Socket::SocketErrno > ErrorCallback;
-
+
/**
* \brief Query routing cache for an existing route, for an outbound packet
*
@@ -77,7 +77,7 @@
* \returns a code that indicates what happened in the lookup
*/
virtual Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr) = 0;
-
+
/**
* \brief Route an input packet (to be forwarded or locally delivered)
*
@@ -100,8 +100,8 @@
* forwarding or delivering the packet, false otherwise
*/
virtual bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
- UnicastForwardCallback ucb, MulticastForwardCallback mcb,
- LocalDeliverCallback lcb, ErrorCallback ecb) = 0;
+ UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+ LocalDeliverCallback lcb, ErrorCallback ecb) = 0;
/**
* \brief Notify when specified interface goes UP.
@@ -111,7 +111,7 @@
* \param interface the index of the interface we are being notified about
*/
virtual void NotifyInterfaceUp (uint32_t interface) = 0;
-
+
/**
* \brief Notify when specified interface goes DOWN.
*
--- a/src/routing/list-routing/ipv6-list-routing.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/routing/list-routing/ipv6-list-routing.cc Wed Dec 30 14:22:25 2009 +0100
@@ -42,7 +42,7 @@
Ipv6ListRouting::Ipv6ListRouting ()
- : m_ipv6 (0)
+ : m_ipv6 (0)
{
NS_LOG_FUNCTION_NOARGS ();
}
@@ -116,16 +116,16 @@
#ifdef NOTYET
if (m_ipv6->MulticastCheckGroup (iif, dst))
#endif
- if (true)
- {
- NS_LOG_LOGIC ("Multicast packet for me-- local deliver");
- Ptr<Packet> packetCopy = p->Copy ();
- // Here may want to disable lcb callback in recursive RouteInput
- // call below
- lcb (packetCopy, header, iif);
- // Fall through-- we may also need to forward this
- retVal = true;
- }
+ if (true)
+ {
+ NS_LOG_LOGIC ("Multicast packet for me-- local deliver");
+ Ptr<Packet> packetCopy = p->Copy ();
+ // Here may want to disable lcb callback in recursive RouteInput
+ // call below
+ lcb (packetCopy, header, iif);
+ // Fall through-- we may also need to forward this
+ retVal = true;
+ }
/* do not forward link-local multicast address */
if (dst == Ipv6Address::GetAllNodesMulticast () || dst == Ipv6Address::GetAllRoutersMulticast () || dst == Ipv6Address::GetAllHostsMulticast ())
@@ -134,7 +134,7 @@
}
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin (); rprotoIter != m_routingProtocols.end ();
+ m_routingProtocols.begin (); rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
NS_LOG_LOGIC ("Multicast packet for me-- trying to forward");
@@ -146,12 +146,12 @@
return retVal;
}
- // TODO: Configurable option to enable RFC 1222 Strong End System Model
- // Right now, we will be permissive and allow a source to send us
- // a packet to one of our other interface addresses; that is, the
- // destination unicast address does not match one of the iif addresses,
- // but we check our other interfaces. This could be an option
- // (to remove the outer loop immediately below and just check iif).
+ // TODO: Configurable option to enable RFC 1222 Strong End System Model
+ // Right now, we will be permissive and allow a source to send us
+ // a packet to one of our other interface addresses; that is, the
+ // destination unicast address does not match one of the iif addresses,
+ // but we check our other interfaces. This could be an option
+ // (to remove the outer loop immediately below and just check iif).
for (uint32_t j = 0; j < m_ipv6->GetNInterfaces (); j++)
{
for (uint32_t i = 0; i < m_ipv6->GetNAddresses (j); i++)
@@ -183,7 +183,7 @@
}
// Next, try to find a route
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -201,7 +201,7 @@
{
NS_LOG_FUNCTION (this << interface);
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -213,7 +213,7 @@
{
NS_LOG_FUNCTION (this << interface);
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -225,7 +225,7 @@
{
NS_LOG_FUNCTION (this << interface << address);
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -237,7 +237,7 @@
{
NS_LOG_FUNCTION (this << interface << address);
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -249,7 +249,7 @@
{
NS_LOG_FUNCTION (this << dst << mask << nextHop << interface);
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -261,7 +261,7 @@
{
NS_LOG_FUNCTION (this << dst << mask << nextHop << interface);
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -275,7 +275,7 @@
NS_LOG_FUNCTION (this << ipv6);
NS_ASSERT (m_ipv6 == 0);
for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
- m_routingProtocols.begin ();
+ m_routingProtocols.begin ();
rprotoIter != m_routingProtocols.end ();
rprotoIter++)
{
@@ -340,113 +340,113 @@
namespace ns3 {
-class Ipv6ARouting : public Ipv6RoutingProtocol {
-public:
- Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr) { return 0;}
- bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
- UnicastForwardCallback ucb, MulticastForwardCallback mcb,
- LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
- void NotifyInterfaceUp (uint32_t interface) {}
- void NotifyInterfaceDown (uint32_t interface) {}
- void NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
- void NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
- void NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::
- GetZero ()) {}
- void NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse) {}
- void SetIpv6 (Ptr<Ipv6> ipv6) {}
-};
+ class Ipv6ARouting : public Ipv6RoutingProtocol {
+ public:
+ Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr) { return 0;}
+ bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
+ UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+ LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
+ void NotifyInterfaceUp (uint32_t interface) {}
+ void NotifyInterfaceDown (uint32_t interface) {}
+ void NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
+ void NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
+ void NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::
+ GetZero ()) {}
+ void NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse) {}
+ void SetIpv6 (Ptr<Ipv6> ipv6) {}
+ };
-class Ipv6BRouting : public Ipv6RoutingProtocol {
-public:
- Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr) { return 0;}
- bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
- UnicastForwardCallback ucb, MulticastForwardCallback mcb,
- LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
- void NotifyInterfaceUp (uint32_t interface) {}
- void NotifyInterfaceDown (uint32_t interface) {}
- void NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
- void NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
- void NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::
- GetZero ()) {}
- void NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse) {}
- void SetIpv6 (Ptr<Ipv6> ipv6) {}
-};
+ class Ipv6BRouting : public Ipv6RoutingProtocol {
+ public:
+ Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr) { return 0;}
+ bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
+ UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+ LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
+ void NotifyInterfaceUp (uint32_t interface) {}
+ void NotifyInterfaceDown (uint32_t interface) {}
+ void NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
+ void NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address) {}
+ void NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::
+ GetZero ()) {}
+ void NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse) {}
+ void SetIpv6 (Ptr<Ipv6> ipv6) {}
+ };
-class Ipv6ListRoutingNegativeTestCase : public TestCase
-{
-public:
- Ipv6ListRoutingNegativeTestCase();
- virtual bool DoRun (void);
-};
+ class Ipv6ListRoutingNegativeTestCase : public TestCase
+ {
+ public:
+ Ipv6ListRoutingNegativeTestCase();
+ virtual bool DoRun (void);
+ };
-Ipv6ListRoutingNegativeTestCase::Ipv6ListRoutingNegativeTestCase()
- : TestCase("Check negative priorities")
-{}
-bool
-Ipv6ListRoutingNegativeTestCase::DoRun (void)
-{
- Ptr<Ipv6ListRouting> lr = CreateObject<Ipv6ListRouting> ();
- Ptr<Ipv6RoutingProtocol> aRouting = CreateObject<Ipv6ARouting> ();
- Ptr<Ipv6RoutingProtocol> bRouting = CreateObject<Ipv6BRouting> ();
- // The Ipv6BRouting should be added with higher priority (larger integer value)
- lr->AddRoutingProtocol (aRouting, -10);
- lr->AddRoutingProtocol (bRouting, -5);
- int16_t first = 3;
- uint32_t num = lr->GetNRoutingProtocols ();
- NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
- Ptr<Ipv6RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
- NS_TEST_ASSERT_MSG_EQ (-5, first, "XXX");
- NS_TEST_ASSERT_MSG_EQ (firstRp, bRouting, "XXX");
+ Ipv6ListRoutingNegativeTestCase::Ipv6ListRoutingNegativeTestCase()
+ : TestCase("Check negative priorities")
+ {}
+ bool
+ Ipv6ListRoutingNegativeTestCase::DoRun (void)
+ {
+ Ptr<Ipv6ListRouting> lr = CreateObject<Ipv6ListRouting> ();
+ Ptr<Ipv6RoutingProtocol> aRouting = CreateObject<Ipv6ARouting> ();
+ Ptr<Ipv6RoutingProtocol> bRouting = CreateObject<Ipv6BRouting> ();
+ // The Ipv6BRouting should be added with higher priority (larger integer value)
+ lr->AddRoutingProtocol (aRouting, -10);
+ lr->AddRoutingProtocol (bRouting, -5);
+ int16_t first = 3;
+ uint32_t num = lr->GetNRoutingProtocols ();
+ NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
+ Ptr<Ipv6RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
+ NS_TEST_ASSERT_MSG_EQ (-5, first, "XXX");
+ NS_TEST_ASSERT_MSG_EQ (firstRp, bRouting, "XXX");
- // XXX
- return false;
-}
+ // XXX
+ return false;
+ }
-class Ipv6ListRoutingPositiveTestCase : public TestCase
-{
-public:
- Ipv6ListRoutingPositiveTestCase();
- virtual bool DoRun (void);
-};
+ class Ipv6ListRoutingPositiveTestCase : public TestCase
+ {
+ public:
+ Ipv6ListRoutingPositiveTestCase();
+ virtual bool DoRun (void);
+ };
-Ipv6ListRoutingPositiveTestCase::Ipv6ListRoutingPositiveTestCase()
- : TestCase("Check positive priorities")
-{}
-bool
-Ipv6ListRoutingPositiveTestCase::DoRun (void)
-{
- Ptr<Ipv6ListRouting> lr = CreateObject<Ipv6ListRouting> ();
- Ptr<Ipv6RoutingProtocol> aRouting = CreateObject<Ipv6ARouting> ();
- Ptr<Ipv6RoutingProtocol> bRouting = CreateObject<Ipv6BRouting> ();
- // The Ipv6ARouting should be added with higher priority (larger integer
- // value) and will be fetched first below
- lr->AddRoutingProtocol (aRouting, 10);
- lr->AddRoutingProtocol (bRouting, 5);
- int16_t first = 3;
- int16_t second = 3;
- uint32_t num = lr->GetNRoutingProtocols ();
- NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
- Ptr<Ipv6RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
- NS_TEST_ASSERT_MSG_EQ (10, first, "XXX");
- NS_TEST_ASSERT_MSG_EQ (firstRp, aRouting, "XXX");
- Ptr<Ipv6RoutingProtocol> secondRp = lr->GetRoutingProtocol (1, second);
- NS_TEST_ASSERT_MSG_EQ (5, second, "XXX");
- NS_TEST_ASSERT_MSG_EQ (secondRp, bRouting, "XXX");
-
- // XXX
- return false;
-}
+ Ipv6ListRoutingPositiveTestCase::Ipv6ListRoutingPositiveTestCase()
+ : TestCase("Check positive priorities")
+ {}
+ bool
+ Ipv6ListRoutingPositiveTestCase::DoRun (void)
+ {
+ Ptr<Ipv6ListRouting> lr = CreateObject<Ipv6ListRouting> ();
+ Ptr<Ipv6RoutingProtocol> aRouting = CreateObject<Ipv6ARouting> ();
+ Ptr<Ipv6RoutingProtocol> bRouting = CreateObject<Ipv6BRouting> ();
+ // The Ipv6ARouting should be added with higher priority (larger integer
+ // value) and will be fetched first below
+ lr->AddRoutingProtocol (aRouting, 10);
+ lr->AddRoutingProtocol (bRouting, 5);
+ int16_t first = 3;
+ int16_t second = 3;
+ uint32_t num = lr->GetNRoutingProtocols ();
+ NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
+ Ptr<Ipv6RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
+ NS_TEST_ASSERT_MSG_EQ (10, first, "XXX");
+ NS_TEST_ASSERT_MSG_EQ (firstRp, aRouting, "XXX");
+ Ptr<Ipv6RoutingProtocol> secondRp = lr->GetRoutingProtocol (1, second);
+ NS_TEST_ASSERT_MSG_EQ (5, second, "XXX");
+ NS_TEST_ASSERT_MSG_EQ (secondRp, bRouting, "XXX");
-static class Ipv6ListRoutingTestSuite : public TestSuite
-{
-public:
- Ipv6ListRoutingTestSuite()
- : TestSuite("ipv6-list-routing", UNIT)
- {
- AddTestCase(new Ipv6ListRoutingPositiveTestCase());
- AddTestCase(new Ipv6ListRoutingNegativeTestCase());
- }
+ // XXX
+ return false;
+ }
-} g_ipv6ListRoutingTestSuite;
+ static class Ipv6ListRoutingTestSuite : public TestSuite
+ {
+ public:
+ Ipv6ListRoutingTestSuite()
+ : TestSuite("ipv6-list-routing", UNIT)
+ {
+ AddTestCase(new Ipv6ListRoutingPositiveTestCase());
+ AddTestCase(new Ipv6ListRoutingNegativeTestCase());
+ }
+
+ } g_ipv6ListRoutingTestSuite;
} // namespace ns3
--- a/src/routing/list-routing/ipv6-list-routing.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/routing/list-routing/ipv6-list-routing.h Wed Dec 30 14:22:25 2009 +0100
@@ -70,13 +70,13 @@
* Values may range between -32768 and +32767.
*/
virtual void AddRoutingProtocol (Ptr<Ipv6RoutingProtocol> routingProtocol, int16_t priority);
-
+
/**
* \brief Get the number of routing protocols.
* \return number of routing protocols in the list
*/
virtual uint32_t GetNRoutingProtocols (void) const;
-
+
/**
* \brief Get pointer to routing protocol stored at index,
*
--- a/src/routing/static-routing/ipv6-routing-table-entry.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/routing/static-routing/ipv6-routing-table-entry.cc Wed Dec 30 14:22:25 2009 +0100
@@ -109,9 +109,9 @@
bool Ipv6RoutingTableEntry::IsHost () const
{
if (m_destNetworkPrefix.IsEqual (Ipv6Prefix::GetOnes ()))
- {
- return true;
- }
+ {
+ return true;
+ }
return false;
}
@@ -138,9 +138,9 @@
bool Ipv6RoutingTableEntry::IsDefault () const
{
if (m_dest.IsEqual (Ipv6Address::GetZero ()))
- {
- return true;
- }
+ {
+ return true;
+ }
return false;
}
@@ -157,9 +157,9 @@
bool Ipv6RoutingTableEntry::IsGateway () const
{
if (m_gateway.IsEqual (Ipv6Address::GetZero ()))
- {
- return false;
- }
+ {
+ return false;
+ }
return true;
}
@@ -206,44 +206,44 @@
std::ostream& operator<< (std::ostream& os, Ipv6RoutingTableEntry const& route)
{
if (route.IsDefault ())
- {
- NS_ASSERT (route.IsGateway ());
- os << "default out =" << route.GetInterface () << ", next hop =" << route.GetGateway ();
- }
+ {
+ NS_ASSERT (route.IsGateway ());
+ os << "default out =" << route.GetInterface () << ", next hop =" << route.GetGateway ();
+ }
else if (route.IsHost ())
- {
- if (route.IsGateway ())
{
- os << "host ="<< route.GetDest () <<
- ", out =" << route.GetInterface () <<
- ", next hop =" << route.GetGateway ();
+ if (route.IsGateway ())
+ {
+ os << "host ="<< route.GetDest () <<
+ ", out =" << route.GetInterface () <<
+ ", next hop =" << route.GetGateway ();
+ }
+ else
+ {
+ os << "host =" << route.GetDest () <<
+ ", out =" << route.GetInterface ();
+ }
}
- else
- {
- os << "host =" << route.GetDest () <<
- ", out =" << route.GetInterface ();
- }
- }
else if (route.IsNetwork ())
- {
- if (route.IsGateway ())
- {
- os << "network =" << route.GetDestNetwork () <<
- ", mask =" << route.GetDestNetworkPrefix () <<
- ",out =" << route.GetInterface () <<
- ", next hop =" << route.GetGateway ();
- }
- else
{
- os << "network =" << route.GetDestNetwork () <<
- ", mask =" << route.GetDestNetworkPrefix () <<
- ",out =" << route.GetInterface ();
+ if (route.IsGateway ())
+ {
+ os << "network =" << route.GetDestNetwork () <<
+ ", mask =" << route.GetDestNetworkPrefix () <<
+ ",out =" << route.GetInterface () <<
+ ", next hop =" << route.GetGateway ();
+ }
+ else
+ {
+ os << "network =" << route.GetDestNetwork () <<
+ ", mask =" << route.GetDestNetworkPrefix () <<
+ ",out =" << route.GetInterface ();
+ }
}
- }
else
- {
- NS_ASSERT (false);
- }
+ {
+ NS_ASSERT (false);
+ }
return os;
}
@@ -320,9 +320,9 @@
", output interfaces =";
for (uint32_t i = 0; i < route.GetNOutputInterfaces (); ++i)
- {
- os << route.GetOutputInterface (i) << " ";
- }
+ {
+ os << route.GetOutputInterface (i) << " ";
+ }
return os;
}
--- a/src/routing/static-routing/ipv6-routing-table-entry.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/routing/static-routing/ipv6-routing-table-entry.h Wed Dec 30 14:22:25 2009 +0100
@@ -36,227 +36,227 @@
*/
class Ipv6RoutingTableEntry
{
- public:
- /**
- * \brief Constructor.
- */
- Ipv6RoutingTableEntry ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Ipv6RoutingTableEntry ();
- /**
- * \brief Copy constructor.
- * \param route the route to copy
- */
- Ipv6RoutingTableEntry (Ipv6RoutingTableEntry const & route);
+ /**
+ * \brief Copy constructor.
+ * \param route the route to copy
+ */
+ Ipv6RoutingTableEntry (Ipv6RoutingTableEntry const & route);
- /**
- * \brief Copy constructor.
- * \param route the route to copy
- */
- Ipv6RoutingTableEntry (Ipv6RoutingTableEntry const* route);
+ /**
+ * \brief Copy constructor.
+ * \param route the route to copy
+ */
+ Ipv6RoutingTableEntry (Ipv6RoutingTableEntry const* route);
- /**
- * \brief Destructor
- */
- ~Ipv6RoutingTableEntry ();
+ /**
+ * \brief Destructor
+ */
+ ~Ipv6RoutingTableEntry ();
- /**
- * \brief Is the route entry correspond to a host ?
- * \return true if the route is a host, false otherwise
- */
- bool IsHost () const;
+ /**
+ * \brief Is the route entry correspond to a host ?
+ * \return true if the route is a host, false otherwise
+ */
+ bool IsHost () const;
- /**
- * \brief Get the destination.
- * \return the IPv6 address of the destination of this route
- */
- Ipv6Address GetDest () const;
+ /**
+ * \brief Get the destination.
+ * \return the IPv6 address of the destination of this route
+ */
+ Ipv6Address GetDest () const;
- /**
- * \brief Get the prefix to use (for multihomed link).
- * \return prefix address to use
- */
- Ipv6Address GetPrefixToUse () const;
+ /**
+ * \brief Get the prefix to use (for multihomed link).
+ * \return prefix address to use
+ */
+ Ipv6Address GetPrefixToUse () const;
- /**
- * \brief Set the prefix to use.
- * \param prefix prefix to use
- */
- void SetPrefixToUse (Ipv6Address prefix);
+ /**
+ * \brief Set the prefix to use.
+ * \param prefix prefix to use
+ */
+ void SetPrefixToUse (Ipv6Address prefix);
- /**
- * \brief Is the route entry correspond to a network ?
- * \return true if the route is a network, false otherwise
- */
- bool IsNetwork () const;
+ /**
+ * \brief Is the route entry correspond to a network ?
+ * \return true if the route is a network, false otherwise
+ */
+ bool IsNetwork () const;
- /**
- * \brief Get the destination network.
- * \return the destination network
- */
- Ipv6Address GetDestNetwork () const;
+ /**
+ * \brief Get the destination network.
+ * \return the destination network
+ */
+ Ipv6Address GetDestNetwork () const;
- /**
- * \brief Get the destination prefix.
- * \return the destination prefix
- */
- Ipv6Prefix GetDestNetworkPrefix () const;
+ /**
+ * \brief Get the destination prefix.
+ * \return the destination prefix
+ */
+ Ipv6Prefix GetDestNetworkPrefix () const;
- /**
- * \brief Is it the default route ?
- * \return true if this route is a default route, false otherwise
- */
- bool IsDefault () const;
+ /**
+ * \brief Is it the default route ?
+ * \return true if this route is a default route, false otherwise
+ */
+ bool IsDefault () const;
- /**
- * \brief Is it the gateway ?
- * \return true if this route is a gateway, false otherwise
- */
- bool IsGateway () const;
+ /**
+ * \brief Is it the gateway ?
+ * \return true if this route is a gateway, false otherwise
+ */
+ bool IsGateway () const;
- /**
- * \brief Get the gateway.
- * \return the IPv6 address of the gateway
- */
- Ipv6Address GetGateway () const;
+ /**
+ * \brief Get the gateway.
+ * \return the IPv6 address of the gateway
+ */
+ Ipv6Address GetGateway () const;
- /**
- * \brief Get the interface index.
- * \return the index of the interface
- */
- uint32_t GetInterface () const;
+ /**
+ * \brief Get the interface index.
+ * \return the index of the interface
+ */
+ uint32_t GetInterface () const;
- /**
- * \brief Create a route to a host.
- * \param dest destination address
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \param prefixToUse prefix that should be used for source address for this destination
- * \return IPv6Route object
- */
- static Ipv6RoutingTableEntry CreateHostRouteTo (Ipv6Address dest, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address ());
+ /**
+ * \brief Create a route to a host.
+ * \param dest destination address
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \param prefixToUse prefix that should be used for source address for this destination
+ * \return IPv6Route object
+ */
+ static Ipv6RoutingTableEntry CreateHostRouteTo (Ipv6Address dest, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address ());
- /**
- * \brief Create a route to a host.
- * \param dest destination address
- * \param interface interface index
- * \return IPv6Route object
- */
- static Ipv6RoutingTableEntry CreateHostRouteTo (Ipv6Address dest, uint32_t interface);
+ /**
+ * \brief Create a route to a host.
+ * \param dest destination address
+ * \param interface interface index
+ * \return IPv6Route object
+ */
+ static Ipv6RoutingTableEntry CreateHostRouteTo (Ipv6Address dest, uint32_t interface);
- /**
- * \brief Create a route to a network.
- * \param network network address
- * \param networkPrefix network prefix
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \return IPv6Route object
- */
- static Ipv6RoutingTableEntry CreateNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface);
+ /**
+ * \brief Create a route to a network.
+ * \param network network address
+ * \param networkPrefix network prefix
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \return IPv6Route object
+ */
+ static Ipv6RoutingTableEntry CreateNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface);
- /**
- * \brief Create a route to a network.
- * \param network network address
- * \param networkPrefix network prefix
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \param prefixToUse prefix that should be used for source address for this destination
- * \return IPv6Route object
- */
- static Ipv6RoutingTableEntry CreateNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse);
+ /**
+ * \brief Create a route to a network.
+ * \param network network address
+ * \param networkPrefix network prefix
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \param prefixToUse prefix that should be used for source address for this destination
+ * \return IPv6Route object
+ */
+ static Ipv6RoutingTableEntry CreateNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse);
- /**
- * \brief Create a route to a network.
- * \param network network address
- * \param networkPrefix network prefix
- * \param interface interface index
- * \return IPv6Route object
- */
- static Ipv6RoutingTableEntry CreateNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface);
+ /**
+ * \brief Create a route to a network.
+ * \param network network address
+ * \param networkPrefix network prefix
+ * \param interface interface index
+ * \return IPv6Route object
+ */
+ static Ipv6RoutingTableEntry CreateNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface);
- /**
- * \brief Create a default route.
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \return IPv6Route object
- */
- static Ipv6RoutingTableEntry CreateDefaultRoute (Ipv6Address nextHop, uint32_t interface);
+ /**
+ * \brief Create a default route.
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \return IPv6Route object
+ */
+ static Ipv6RoutingTableEntry CreateDefaultRoute (Ipv6Address nextHop, uint32_t interface);
- private:
- /**
- * \brief Constructor.
- * \param network network address
- * \param prefix network prefix
- * \param gateway the gateway
- * \param interface the interface index
- */
- Ipv6RoutingTableEntry (Ipv6Address network, Ipv6Prefix prefix, Ipv6Address gateway, uint32_t interface);
+private:
+ /**
+ * \brief Constructor.
+ * \param network network address
+ * \param prefix network prefix
+ * \param gateway the gateway
+ * \param interface the interface index
+ */
+ Ipv6RoutingTableEntry (Ipv6Address network, Ipv6Prefix prefix, Ipv6Address gateway, uint32_t interface);
- /**
- * \brief Constructor.
- * \param network network address
- * \param prefix network prefix
- * \param interface the interface index
- * \param prefixToUse prefix to use
- */
- Ipv6RoutingTableEntry (Ipv6Address network, Ipv6Prefix prefix, uint32_t interface, Ipv6Address prefixToUse);
+ /**
+ * \brief Constructor.
+ * \param network network address
+ * \param prefix network prefix
+ * \param interface the interface index
+ * \param prefixToUse prefix to use
+ */
+ Ipv6RoutingTableEntry (Ipv6Address network, Ipv6Prefix prefix, uint32_t interface, Ipv6Address prefixToUse);
- /**
- * \brief Constructor.
- * \param network network address
- * \param prefix network prefix
- * \param gateway the gateway
- * \param interface the interface index
- * \param prefixToUse prefix to use
- */
- Ipv6RoutingTableEntry (Ipv6Address network, Ipv6Prefix prefix, Ipv6Address gateway, uint32_t interface, Ipv6Address prefixToUse);
+ /**
+ * \brief Constructor.
+ * \param network network address
+ * \param prefix network prefix
+ * \param gateway the gateway
+ * \param interface the interface index
+ * \param prefixToUse prefix to use
+ */
+ Ipv6RoutingTableEntry (Ipv6Address network, Ipv6Prefix prefix, Ipv6Address gateway, uint32_t interface, Ipv6Address prefixToUse);
- /**
- * \brief Constructor.
- * \param dest destination address
- * \param prefix destiation prefix
- * \param interface interface index
- */
- Ipv6RoutingTableEntry (Ipv6Address dest, Ipv6Prefix prefix, uint32_t interface);
+ /**
+ * \brief Constructor.
+ * \param dest destination address
+ * \param prefix destiation prefix
+ * \param interface interface index
+ */
+ Ipv6RoutingTableEntry (Ipv6Address dest, Ipv6Prefix prefix, uint32_t interface);
- /**
- * \brief Constructor.
- * \param dest destination address
- * \param gateway the gateway
- * \param interface interface index
- */
- Ipv6RoutingTableEntry (Ipv6Address dest, Ipv6Address gateway, uint32_t interface);
+ /**
+ * \brief Constructor.
+ * \param dest destination address
+ * \param gateway the gateway
+ * \param interface interface index
+ */
+ Ipv6RoutingTableEntry (Ipv6Address dest, Ipv6Address gateway, uint32_t interface);
- /**
- * \brief Constructor.
- * \param dest destination address
- * \param interface interface index
- */
- Ipv6RoutingTableEntry (Ipv6Address dest, uint32_t interface);
+ /**
+ * \brief Constructor.
+ * \param dest destination address
+ * \param interface interface index
+ */
+ Ipv6RoutingTableEntry (Ipv6Address dest, uint32_t interface);
- /**
- * \brief IPv6 address of the destination.
- */
- Ipv6Address m_dest;
+ /**
+ * \brief IPv6 address of the destination.
+ */
+ Ipv6Address m_dest;
- /**
- * \brief IPv6 prefix of the destination
- */
- Ipv6Prefix m_destNetworkPrefix;
+ /**
+ * \brief IPv6 prefix of the destination
+ */
+ Ipv6Prefix m_destNetworkPrefix;
- /**
- * \brief IPv6 address of the gateway.
- */
- Ipv6Address m_gateway;
+ /**
+ * \brief IPv6 address of the gateway.
+ */
+ Ipv6Address m_gateway;
- /**
- * \brief The interface index.
- */
- uint32_t m_interface;
+ /**
+ * \brief The interface index.
+ */
+ uint32_t m_interface;
- /**
- * \brief Prefix to use.
- */
- Ipv6Address m_prefixToUse;
+ /**
+ * \brief Prefix to use.
+ */
+ Ipv6Address m_prefixToUse;
};
@@ -268,100 +268,100 @@
*/
class Ipv6MulticastRoutingTableEntry
{
- public:
- /**
- * \brief Constructor.
- */
- Ipv6MulticastRoutingTableEntry ();
+public:
+ /**
+ * \brief Constructor.
+ */
+ Ipv6MulticastRoutingTableEntry ();
- /**
- * \brief Copy constructor.
- * \param route the route to copy
- */
- Ipv6MulticastRoutingTableEntry (Ipv6MulticastRoutingTableEntry const & route);
+ /**
+ * \brief Copy constructor.
+ * \param route the route to copy
+ */
+ Ipv6MulticastRoutingTableEntry (Ipv6MulticastRoutingTableEntry const & route);
- /**
- * \brief Copy constructor.
- * \param route the route to copy
- */
- Ipv6MulticastRoutingTableEntry (Ipv6MulticastRoutingTableEntry const* route);
+ /**
+ * \brief Copy constructor.
+ * \param route the route to copy
+ */
+ Ipv6MulticastRoutingTableEntry (Ipv6MulticastRoutingTableEntry const* route);
- /**
- * \brief Get the source of this route
- * \return IPv6 address of the source of this route
- */
- Ipv6Address GetOrigin () const;
+ /**
+ * \brief Get the source of this route
+ * \return IPv6 address of the source of this route
+ */
+ Ipv6Address GetOrigin () const;
- /**
- * \brief Get the group.
- * \return IPv6 address of the multicast group of this route
- */
- Ipv6Address GetGroup () const;
+ /**
+ * \brief Get the group.
+ * \return IPv6 address of the multicast group of this route
+ */
+ Ipv6Address GetGroup () const;
- /**
- * \brief Get the input interface address.
- * \return input interface index
- */
- uint32_t GetInputInterface () const;
+ /**
+ * \brief Get the input interface address.
+ * \return input interface index
+ */
+ uint32_t GetInputInterface () const;
- /**
- * \brief Get the number of output interfaces of this route.
- * \return number of output interfaces of this route.
- */
- uint32_t GetNOutputInterfaces () const;
+ /**
+ * \brief Get the number of output interfaces of this route.
+ * \return number of output interfaces of this route.
+ */
+ uint32_t GetNOutputInterfaces () const;
- /**
- * \brief Get a specified output interface.
- * \param n index
- * \return a specified output interface
- */
- uint32_t GetOutputInterface (uint32_t n) const;
+ /**
+ * \brief Get a specified output interface.
+ * \param n index
+ * \return a specified output interface
+ */
+ uint32_t GetOutputInterface (uint32_t n) const;
- /**
- * \brief Get all of the output interfaces of this route.
- * \return a vector of all output interfaces of this route
- */
- std::vector<uint32_t> GetOutputInterfaces () const;
+ /**
+ * \brief Get all of the output interfaces of this route.
+ * \return a vector of all output interfaces of this route
+ */
+ std::vector<uint32_t> GetOutputInterfaces () const;
- /**
- * \brief Create a multicast route.
- * \param origin IPv6 address of the origin source
- * \param group Ipv6Address of the group
- * \param inputInterface interface number
- * \param outputInterfaces list of output interface number
- * \return a multicast route
- */
- static Ipv6MulticastRoutingTableEntry CreateMulticastRoute (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector<uint32_t> outputInterfaces);
+ /**
+ * \brief Create a multicast route.
+ * \param origin IPv6 address of the origin source
+ * \param group Ipv6Address of the group
+ * \param inputInterface interface number
+ * \param outputInterfaces list of output interface number
+ * \return a multicast route
+ */
+ static Ipv6MulticastRoutingTableEntry CreateMulticastRoute (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector<uint32_t> outputInterfaces);
- private:
- /**
- * \brief Constructor.
- * \param origin IPv6 address of the source
- * \param group IPv6 address of the group
- * \param inputInterface interface number
- * \param outputInterfaces list of output interface number
- */
- Ipv6MulticastRoutingTableEntry (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector<uint32_t> outputInterfaces);
+private:
+ /**
+ * \brief Constructor.
+ * \param origin IPv6 address of the source
+ * \param group IPv6 address of the group
+ * \param inputInterface interface number
+ * \param outputInterfaces list of output interface number
+ */
+ Ipv6MulticastRoutingTableEntry (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector<uint32_t> outputInterfaces);
- /**
- * \brief The IPv6 address of the source.
- */
- Ipv6Address m_origin;
+ /**
+ * \brief The IPv6 address of the source.
+ */
+ Ipv6Address m_origin;
- /**
- * \brief The IPv6 address of the group.
- */
- Ipv6Address m_group;
+ /**
+ * \brief The IPv6 address of the group.
+ */
+ Ipv6Address m_group;
- /**
- * \brief The input interface.
- */
- uint32_t m_inputInterface;
+ /**
+ * \brief The input interface.
+ */
+ uint32_t m_inputInterface;
- /**
- * \brief The output interfaces.
- */
- std::vector<uint32_t> m_outputInterfaces;
+ /**
+ * \brief The output interfaces.
+ */
+ std::vector<uint32_t> m_outputInterfaces;
};
std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoutingTableEntry const& route);
--- a/src/routing/static-routing/ipv6-static-routing.cc Tue Dec 29 16:22:06 2009 -0800
+++ b/src/routing/static-routing/ipv6-static-routing.cc Wed Dec 30 14:22:25 2009 +0100
@@ -40,8 +40,8 @@
return tid;
}
- Ipv6StaticRouting::Ipv6StaticRouting ()
-: m_ipv6 (0)
+Ipv6StaticRouting::Ipv6StaticRouting ()
+ : m_ipv6 (0)
{
NS_LOG_FUNCTION_NOARGS ();
}
@@ -59,16 +59,16 @@
m_ipv6 = ipv6;
for (i = 0 ; i < m_ipv6->GetNInterfaces () ; i++)
- {
- if (m_ipv6->IsUp (i))
{
- NotifyInterfaceUp (i);
+ if (m_ipv6->IsUp (i))
+ {
+ NotifyInterfaceUp (i);
+ }
+ else
+ {
+ NotifyInterfaceDown (i);
+ }
}
- else
- {
- NotifyInterfaceDown (i);
- }
- }
}
void Ipv6StaticRouting::AddHostRouteTo (Ipv6Address dst, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse, uint32_t metric)
@@ -143,17 +143,17 @@
NS_ASSERT_MSG (index < m_multicastRoutes.size (), "Ipv6StaticRouting::GetMulticastRoute () : Index out of range");
if (index < m_multicastRoutes.size ())
- {
- uint32_t tmp = 0;
- for (MulticastRoutesCI i = m_multicastRoutes.begin () ; i != m_multicastRoutes.end () ; i++)
{
- if (tmp == index)
- {
- return *i;
- }
- tmp++;
+ uint32_t tmp = 0;
+ for (MulticastRoutesCI i = m_multicastRoutes.begin () ; i != m_multicastRoutes.end () ; i++)
+ {
+ if (tmp == index)
+ {
+ return *i;
+ }
+ tmp++;
+ }
}
- }
return 0;
}
@@ -161,17 +161,17 @@
{
NS_LOG_FUNCTION (this << origin << group << inputInterface);
for (MulticastRoutesI i = m_multicastRoutes.begin (); i != m_multicastRoutes.end (); i++)
- {
- Ipv6MulticastRoutingTableEntry *route = *i;
- if (origin == route->GetOrigin () &&
- group == route->GetGroup () &&
- inputInterface == route->GetInputInterface ())
{
- delete *i;
- m_multicastRoutes.erase (i);
- return true;
+ Ipv6MulticastRoutingTableEntry *route = *i;
+ if (origin == route->GetOrigin () &&
+ group == route->GetGroup () &&
+ inputInterface == route->GetInputInterface ())
+ {
+ delete *i;
+ m_multicastRoutes.erase (i);
+ return true;
+ }
}
- }
return false;
}
@@ -181,15 +181,15 @@
uint32_t tmp = 0;
for (MulticastRoutesI i = m_multicastRoutes.begin () ; i != m_multicastRoutes.end () ; i++)
- {
- if (tmp == index)
{
- delete *i;
- m_multicastRoutes.erase (i);
- return;
+ if (tmp == index)
+ {
+ delete *i;
+ m_multicastRoutes.erase (i);
+ return;
+ }
+ tmp++;
}
- tmp++;
- }
}
bool Ipv6StaticRouting::HasNetworkDest (Ipv6Address network, uint32_t interfaceIndex)
@@ -198,16 +198,16 @@
/* in the network table */
for (NetworkRoutesI j = m_networkRoutes.begin () ; j != m_networkRoutes.end () ; j++)
- {
- Ipv6RoutingTableEntry* rtentry = j->first;
- Ipv6Prefix prefix = rtentry->GetDestNetworkPrefix ();
- Ipv6Address entry = rtentry->GetDestNetwork ();
+ {
+ Ipv6RoutingTableEntry* rtentry = j->first;
+ Ipv6Prefix prefix = rtentry->GetDestNetworkPrefix ();
+ Ipv6Address entry = rtentry->GetDestNetwork ();
- if (prefix.IsMatch (network, entry) && rtentry->GetInterface () == interfaceIndex)
- {
- return true;
+ if (prefix.IsMatch (network, entry) && rtentry->GetInterface () == interfaceIndex)
+ {
+ return true;
+ }
}
- }
/* beuh!!! not route at all */
return false;
@@ -223,80 +223,80 @@
/* when sending on link-local multicast, there have to be interface specified */
if (dst == Ipv6Address::GetAllNodesMulticast () || dst.IsSolicitedMulticast () ||
dst == Ipv6Address::GetAllRoutersMulticast () || dst == Ipv6Address::GetAllHostsMulticast ())
- {
- NS_ASSERT_MSG (interface, "Try to send on link-local multicast address, and no interface index is given!");
- rtentry = Create<Ipv6Route> ();
- rtentry->SetSource (SourceAddressSelection (m_ipv6->GetInterfaceForDevice (interface), dst));
- rtentry->SetDestination (dst);
- rtentry->SetGateway (Ipv6Address::GetZero ());
- rtentry->SetOutputDevice (interface);
- return rtentry;
- }
+ {
+ NS_ASSERT_MSG (interface, "Try to send on link-local multicast address, and no interface index is given!");
+ rtentry = Create<Ipv6Route> ();
+ rtentry->SetSource (SourceAddressSelection (m_ipv6->GetInterfaceForDevice (interface), dst));
+ rtentry->SetDestination (dst);
+ rtentry->SetGateway (Ipv6Address::GetZero ());
+ rtentry->SetOutputDevice (interface);
+ return rtentry;
+ }
for (NetworkRoutesI it = m_networkRoutes.begin () ; it != m_networkRoutes.end () ; it++)
- {
- Ipv6RoutingTableEntry* j = it->first;
- uint32_t metric = it->second;
- Ipv6Prefix mask = j->GetDestNetworkPrefix ();
- uint16_t maskLen = mask.GetPrefixLength ();
- Ipv6Address entry = j->GetDestNetwork ();
+ {
+ Ipv6RoutingTableEntry* j = it->first;
+ uint32_t metric = it->second;
+ Ipv6Prefix mask = j->GetDestNetworkPrefix ();
+ uint16_t maskLen = mask.GetPrefixLength ();
+ Ipv6Address entry = j->GetDestNetwork ();
- NS_LOG_LOGIC ("Searching for route to " << dst << ", mask length " << maskLen << ", metric " << metric);
+ NS_LOG_LOGIC ("Searching for route to " << dst << ", mask length " << maskLen << ", metric " << metric);
- if (mask.IsMatch (dst, entry))
- {
- NS_LOG_LOGIC ("Found global network route " << j << ", mask length " << maskLen << ", metric " << metric);
+ if (mask.IsMatch (dst, entry))
+ {
+ NS_LOG_LOGIC ("Found global network route " << j << ", mask length " << maskLen << ", metric " << metric);
- /* if interface is given, check the route will output on this interface */
- if (!interface || interface == m_ipv6->GetNetDevice (j->GetInterface ()))
- {
- if (maskLen < longestMask)
- {
- NS_LOG_LOGIC ("Previous match longer, skipping");
- continue;
- }
+ /* if interface is given, check the route will output on this interface */
+ if (!interface || interface == m_ipv6->GetNetDevice (j->GetInterface ()))
+ {
+ if (maskLen < longestMask)
+ {
+ NS_LOG_LOGIC ("Previous match longer, skipping");
+ continue;
+ }
- if (maskLen > longestMask)
- {
- shortestMetric = 0xffffffff;
- }
+ if (maskLen > longestMask)
+ {
+ shortestMetric = 0xffffffff;
+ }
- longestMask = maskLen;
- if (metric > shortestMetric)
- {
- NS_LOG_LOGIC ("Equal mask length, but previous metric shorter, skipping");
- continue;
- }
+ longestMask = maskLen;
+ if (metric > shortestMetric)
+ {
+ NS_LOG_LOGIC ("Equal mask length, but previous metric shorter, skipping");
+ continue;
+ }
+
+ shortestMetric = metric;
+ Ipv6RoutingTableEntry* route = j;
+ uint32_t interfaceIdx = route->GetInterface ();
+ rtentry = Create<Ipv6Route> ();
- shortestMetric = metric;
- Ipv6RoutingTableEntry* route = j;
- uint32_t interfaceIdx = route->GetInterface ();
- rtentry = Create<Ipv6Route> ();
+ if (route->GetGateway ().IsAny ())
+ {
+ rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetDest ()));
+ }
+ else if (route->GetDest ().IsAny ()) /* default route */
+ {
+ rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetPrefixToUse ().IsAny () ? route->GetGateway () : route->GetPrefixToUse ()));
+ }
+ else
+ {
+ rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetGateway ()));
+ }
- if (route->GetGateway ().IsAny ())
- {
- rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetDest ()));
+ rtentry->SetDestination (route->GetDest ());
+ rtentry->SetGateway (route->GetGateway ());
+ rtentry->SetOutputDevice (m_ipv6->GetNetDevice (interfaceIdx));
+ }
}
- else if (route->GetDest ().IsAny ()) /* default route */
- {
- rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetPrefixToUse ().IsAny () ? route->GetGateway () : route->GetPrefixToUse ()));
- }
- else
- {
- rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetGateway ()));
- }
-
- rtentry->SetDestination (route->GetDest ());
- rtentry->SetGateway (route->GetGateway ());
- rtentry->SetOutputDevice (m_ipv6->GetNetDevice (interfaceIdx));
- }
}
- }
if(rtentry)
- {
- NS_LOG_LOGIC ("Matching route via " << rtentry->GetDestination () << " (throught " << rtentry->GetGateway () << ") at the end");
- }
+ {
+ NS_LOG_LOGIC ("Matching route via " << rtentry->GetDestination () << " (throught " << rtentry->GetGateway () << ") at the end");
+ }
return rtentry;
}
@@ -305,15 +305,15 @@
NS_LOG_FUNCTION_NOARGS ();
for (NetworkRoutesI j = m_networkRoutes.begin () ; j != m_networkRoutes.end () ; j = m_networkRoutes.erase (j))
- {
- delete j->first;
- }
+ {
+ delete j->first;
+ }
m_networkRoutes.clear ();
for (MulticastRoutesI i = m_multicastRoutes.begin () ; i != m_multicastRoutes.end () ; i = m_multicastRoutes.erase (i))
- {
- delete (*i);
- }
+ {
+ delete (*i);
+ }
m_multicastRoutes.clear ();
m_ipv6 = 0;
@@ -326,46 +326,46 @@
Ptr<Ipv6MulticastRoute> mrtentry = 0;
for (MulticastRoutesI i = m_multicastRoutes.begin () ; i != m_multicastRoutes.end () ; i++)
- {
- Ipv6MulticastRoutingTableEntry* route = *i;
+ {
+ Ipv6MulticastRoutingTableEntry* route = *i;
- /*
- We've been passed an origin address, a multicast group address and an
- interface index. We have to decide if the current route in the list is
- a match.
+ /*
+ We've been passed an origin address, a multicast group address and an
+ interface index. We have to decide if the current route in the list is
+ a match.
- The first case is the restrictive case where the origin, group and index
- matches. This picks up exact routes during forwarded and exact routes from
- the local node (in which case the ifIndex is a wildcard).
- */
+ The first case is the restrictive case where the origin, group and index
+ matches. This picks up exact routes during forwarded and exact routes from
+ the local node (in which case the ifIndex is a wildcard).
+ */
- if (origin == route->GetOrigin () && group == route->GetGroup ())
- {
- /* skipping SSM case */
- NS_LOG_LOGIC ("Find source specific multicast route" << *i);
- }
+ if (origin == route->GetOrigin () && group == route->GetGroup ())
+ {
+ /* skipping SSM case */
+ NS_LOG_LOGIC ("Find source specific multicast route" << *i);
+ }
- if (group == route->GetGroup ())
- {
- if (interface == Ipv6::IF_ANY || interface == route->GetInputInterface ())
- {
- NS_LOG_LOGIC ("Found multicast route" << *i);
- mrtentry = Create<Ipv6MulticastRoute> ();
- mrtentry->SetGroup (route->GetGroup ());
- mrtentry->SetOrigin (route->GetOrigin ());
- mrtentry->SetParent (route->GetInputInterface ());
- for (uint32_t j = 0 ; j < route->GetNOutputInterfaces () ; j++)
+ if (group == route->GetGroup ())
{
- if (route->GetOutputInterface (j))
- {
- NS_LOG_LOGIC ("Setting output interface index " << route->GetOutputInterface (j));
- mrtentry->SetOutputTtl (route->GetOutputInterface (j), Ipv6MulticastRoute::MAX_TTL - 1);
- }
+ if (interface == Ipv6::IF_ANY || interface == route->GetInputInterface ())
+ {
+ NS_LOG_LOGIC ("Found multicast route" << *i);
+ mrtentry = Create<Ipv6MulticastRoute> ();
+ mrtentry->SetGroup (route->GetGroup ());
+ mrtentry->SetOrigin (route->GetOrigin ());
+ mrtentry->SetParent (route->GetInputInterface ());
+ for (uint32_t j = 0 ; j < route->GetNOutputInterfaces () ; j++)
+ {
+ if (route->GetOutputInterface (j))
+ {
+ NS_LOG_LOGIC ("Setting output interface index " << route->GetOutputInterface (j));
+ mrtentry->SetOutputTtl (route->GetOutputInterface (j), Ipv6MulticastRoute::MAX_TTL - 1);
+ }
+ }
+ return mrtentry;
+ }
}
- return mrtentry;
- }
}
- }
return mrtentry;
}
@@ -382,34 +382,34 @@
Ipv6RoutingTableEntry* result = 0;
for (NetworkRoutesI it = m_networkRoutes.begin () ; it != m_networkRoutes.end () ; it++)
- {
- Ipv6RoutingTableEntry* j = it->first;
- uint32_t metric = it->second;
- Ipv6Prefix mask = j->GetDestNetworkPrefix ();
- uint16_t maskLen = mask.GetPrefixLength ();
- Ipv6Address entry = j->GetDestNetwork ();
+ {
+ Ipv6RoutingTableEntry* j = it->first;
+ uint32_t metric = it->second;
+ Ipv6Prefix mask = j->GetDestNetworkPrefix ();
+ uint16_t maskLen = mask.GetPrefixLength ();
+ Ipv6Address entry = j->GetDestNetwork ();
- if (maskLen)
- {
- continue;
+ if (maskLen)
+ {
+ continue;
+ }
+
+ if (metric > shortestMetric)
+ {
+ continue;
+ }
+ shortestMetric = metric;
+ result = j;
}
- if (metric > shortestMetric)
+ if (result)
{
- continue;
+ return result;
}
- shortestMetric = metric;
- result = j;
- }
-
- if (result)
- {
- return result;
- }
else
- {
- return Ipv6RoutingTableEntry ();
- }
+ {
+ return Ipv6RoutingTableEntry ();
+ }
}
Ipv6RoutingTableEntry Ipv6StaticRouting::GetRoute (uint32_t index)
@@ -418,13 +418,13 @@
uint32_t tmp = 0;
for (NetworkRoutesI it = m_networkRoutes.begin () ; it != m_networkRoutes.end () ; it++)
- {
- if (tmp == index)
{
- return it->first;
+ if (tmp == index)
+ {
+ return it->first;
+ }
+ tmp++;
}
- tmp++;
- }
NS_ASSERT (false);
// quiet compiler.
return 0;
@@ -436,13 +436,13 @@
uint32_t tmp = 0;
for (NetworkRoutesI it = m_networkRoutes.begin () ; it != m_networkRoutes.end () ; it++)
- {
- if (tmp == index)
{
- return it->second;
+ if (tmp == index)
+ {
+ return it->second;
+ }
+ tmp++;
}
- tmp++;
- }
NS_ASSERT (false);
// quiet compiler.
return 0;
@@ -454,15 +454,15 @@
uint32_t tmp = 0;
for (NetworkRoutesI it = m_networkRoutes.begin () ; it != m_networkRoutes.end () ; it++)
- {
- if (tmp == index)
{
- delete it->first;
- m_networkRoutes.erase (it);
- return;
+ if (tmp == index)
+ {
+ delete it->first;
+ m_networkRoutes.erase (it);
+ return;
+ }
+ tmp++;
}
- tmp++;
- }
NS_ASSERT (false);
}
@@ -471,16 +471,16 @@
NS_LOG_FUNCTION (this << network << prefix << ifIndex);
for (NetworkRoutesI it = m_networkRoutes.begin () ; it != m_networkRoutes.end () ; it++)
- {
- Ipv6RoutingTableEntry* rtentry = it->first;
- if (network == rtentry->GetDest () && rtentry->GetInterface () == ifIndex &&
- rtentry->GetPrefixToUse () == prefixToUse)
{
- delete it->first;
- m_networkRoutes.erase (it);
- return;
+ Ipv6RoutingTableEntry* rtentry = it->first;
+ if (network == rtentry->GetDest () && rtentry->GetInterface () == ifIndex &&
+ rtentry->GetPrefixToUse () == prefixToUse)
+ {
+ delete it->first;
+ m_networkRoutes.erase (it);
+ return;
+ }
}
- }
}
Ptr<Ipv6Route> Ipv6StaticRouting::RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr)
@@ -490,25 +490,25 @@
Ptr<Ipv6Route> rtentry = 0;
if (destination.IsMulticast ())
- {
- // Note: Multicast routes for outbound packets are stored in the
- // normal unicast table. An implication of this is that it is not
- // possible to source multicast datagrams on multiple interfaces.
- // This is a well-known property of sockets implementation on
- // many Unix variants.
- // So, we just log it and fall through to LookupStatic ()
- NS_LOG_LOGIC ("RouteOutput ()::Multicast destination");
- }
+ {
+ // Note: Multicast routes for outbound packets are stored in the
+ // normal unicast table. An implication of this is that it is not
+ // possible to source multicast datagrams on multiple interfaces.
+ // This is a well-known property of sockets implementation on
+ // many Unix variants.
+ // So, we just log it and fall through to LookupStatic ()
+ NS_LOG_LOGIC ("RouteOutput ()::Multicast destination");
+ }
rtentry = LookupStatic (destination, oif);
if (rtentry)
- {
- sockerr = Socket::ERROR_NOTERROR;
- }
+ {
+ sockerr = Socket::ERROR_NOTERROR;
+ }
else
- {
- sockerr = Socket::ERROR_NOROUTETOHOST;
- }
+ {
+ sockerr = Socket::ERROR_NOROUTETOHOST;
+ }
return rtentry;
}
@@ -524,30 +524,30 @@
Ipv6Address dst = header.GetDestinationAddress ();
if (dst.IsMulticast ())
- {
- NS_LOG_LOGIC ("Multicast destination");
- Ptr<Ipv6MulticastRoute> mrtentry = LookupStatic (header.GetSourceAddress (),
- header.GetDestinationAddress (), m_ipv6->GetInterfaceForDevice (idev));
+ {
+ NS_LOG_LOGIC ("Multicast destination");
+ Ptr<Ipv6MulticastRoute> mrtentry = LookupStatic (header.GetSourceAddress (),
+ header.GetDestinationAddress (), m_ipv6->GetInterfaceForDevice (idev));
- if (mrtentry)
- {
- NS_LOG_LOGIC ("Multicast route found");
- mcb (mrtentry, p, header); // multicast forwarding callback
- return true;
+ if (mrtentry)
+ {
+ NS_LOG_LOGIC ("Multicast route found");
+ mcb (mrtentry, p, header); // multicast forwarding callback
+ return true;
+ }
+ else
+ {
+ NS_LOG_LOGIC ("Multicast route not found");
+ return false; // Let other routing protocols try to handle this
+ }
}
- else
- {
- NS_LOG_LOGIC ("Multicast route not found");
- return false; // Let other routing protocols try to handle this
- }
- }
- // TODO: Configurable option to enable RFC 1222 Strong End System Model
- // Right now, we will be permissive and allow a source to send us
- // a packet to one of our other interface addresses; that is, the
- // destination unicast address does not match one of the iif addresses,
- // but we check our other interfaces. This could be an option
- // (to remove the outer loop immediately below and just check iif).
+ // TODO: Configurable option to enable RFC 1222 Strong End System Model
+ // Right now, we will be permissive and allow a source to send us
+ // a packet to one of our other interface addresses; that is, the
+ // destination unicast address does not match one of the iif addresses,
+ // but we check our other interfaces. This could be an option
+ // (to remove the outer loop immediately below and just check iif).
for (uint32_t j = 0; j < m_ipv6->GetNInterfaces (); j++)
{
for (uint32_t i = 0; i < m_ipv6->GetNAddresses (j); i++)
@@ -582,37 +582,37 @@
Ptr<Ipv6Route> rtentry = LookupStatic (header.GetDestinationAddress ());
if (rtentry != 0)
- {
- NS_LOG_LOGIC ("Found unicast destination- calling unicast callback");
- ucb (rtentry, p, header); // unicast forwarding callback
- return true;
- }
+ {
+ NS_LOG_LOGIC ("Found unicast destination- calling unicast callback");
+ ucb (rtentry, p, header); // unicast forwarding callback
+ return true;
+ }
else
- {
- NS_LOG_LOGIC ("Did not find unicast destination- returning false");
- return false; // Let other routing protocols try to handle this
- }
+ {
+ NS_LOG_LOGIC ("Did not find unicast destination- returning false");
+ return false; // Let other routing protocols try to handle this
+ }
}
void Ipv6StaticRouting::NotifyInterfaceUp (uint32_t i)
{
for (uint32_t j = 0 ; j < m_ipv6->GetNAddresses (i) ; j++)
- {
- if (m_ipv6->GetAddress (i, j).GetAddress () != Ipv6Address () &&
- m_ipv6->GetAddress (i, j).GetPrefix () != Ipv6Prefix ())
{
- if (m_ipv6->GetAddress (i, j).GetPrefix () == Ipv6Prefix (128))
- {
- /* host route */
- AddHostRouteTo (m_ipv6->GetAddress (i, j).GetAddress (), i);
- }
- else
- {
- AddNetworkRouteTo (m_ipv6->GetAddress (i, j).GetAddress ().CombinePrefix (m_ipv6->GetAddress (i, j).GetPrefix ()),
- m_ipv6->GetAddress (i, j).GetPrefix (), i);
- }
+ if (m_ipv6->GetAddress (i, j).GetAddress () != Ipv6Address () &&
+ m_ipv6->GetAddress (i, j).GetPrefix () != Ipv6Prefix ())
+ {
+ if (m_ipv6->GetAddress (i, j).GetPrefix () == Ipv6Prefix (128))
+ {
+ /* host route */
+ AddHostRouteTo (m_ipv6->GetAddress (i, j).GetAddress (), i);
+ }
+ else
+ {
+ AddNetworkRouteTo (m_ipv6->GetAddress (i, j).GetAddress ().CombinePrefix (m_ipv6->GetAddress (i, j).GetPrefix ()),
+ m_ipv6->GetAddress (i, j).GetPrefix (), i);
+ }
+ }
}
- }
}
void Ipv6StaticRouting::NotifyInterfaceDown (uint32_t i)
@@ -623,42 +623,42 @@
/* remove all static routes that are going through this interface */
while (j < max)
- {
- Ipv6RoutingTableEntry route = GetRoute (j);
+ {
+ Ipv6RoutingTableEntry route = GetRoute (j);
- if (route.GetInterface () == i)
- {
- RemoveRoute (j);
+ if (route.GetInterface () == i)
+ {
+ RemoveRoute (j);
+ }
+ else
+ {
+ j++;
+ }
}
- else
- {
- j++;
- }
- }
}
void Ipv6StaticRouting::NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address)
{
if (!m_ipv6->IsUp (interface))
- {
- return;
- }
+ {
+ return;
+ }
Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (address.GetPrefix ());
Ipv6Prefix networkMask = address.GetPrefix ();
if (address.GetAddress () != Ipv6Address () && address.GetPrefix () != Ipv6Prefix ())
- {
- AddNetworkRouteTo (networkAddress, networkMask, interface);
- }
+ {
+ AddNetworkRouteTo (networkAddress, networkMask, interface);
+ }
}
void Ipv6StaticRouting::NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address)
{
if (!m_ipv6->IsUp (interface))
- {
- return;
- }
+ {
+ return;
+ }
Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (address.GetPrefix ());
Ipv6Prefix networkMask = address.GetPrefix ();
@@ -666,63 +666,63 @@
// Remove all static routes that are going through this interface
// which reference this network
for (uint32_t j = 0 ; j < GetNRoutes () ; j++)
- {
- Ipv6RoutingTableEntry route = GetRoute (j);
+ {
+ Ipv6RoutingTableEntry route = GetRoute (j);
- if (route.GetInterface () == interface &&
- route.IsNetwork () &&
- route.GetDestNetwork () == networkAddress &&
- route.GetDestNetworkPrefix () == networkMask)
- {
- RemoveRoute (j);
+ if (route.GetInterface () == interface &&
+ route.IsNetwork () &&
+ route.GetDestNetwork () == networkAddress &&
+ route.GetDestNetworkPrefix () == networkMask)
+ {
+ RemoveRoute (j);
+ }
}
- }
}
void Ipv6StaticRouting::NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse)
{
NS_LOG_INFO (this << dst << mask << nextHop << interface << prefixToUse);
if (dst != Ipv6Address::GetZero ())
- {
- AddNetworkRouteTo (dst, mask, nextHop, interface);
- }
+ {
+ AddNetworkRouteTo (dst, mask, nextHop, interface);
+ }
else /* default route */
- {
- /* this case is mainly used by configuring default route following RA processing,
- * in case of multipe prefix in RA, the first will configured default route
- */
+ {
+ /* this case is mainly used by configuring default route following RA processing,
+ * in case of multipe prefix in RA, the first will configured default route
+ */
- /* for the moment, all default route has the same metric
- * so according to the longest prefix algorithm,
- * the default route choosen will be the last added
- */
- SetDefaultRoute (nextHop, interface, prefixToUse);
- }
+ /* for the moment, all default route has the same metric
+ * so according to the longest prefix algorithm,
+ * the default route choosen will be the last added
+ */
+ SetDefaultRoute (nextHop, interface, prefixToUse);
+ }
}
void Ipv6StaticRouting::NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse)
{
NS_LOG_FUNCTION (this << dst << mask << nextHop << interface);
if (dst != Ipv6Address::GetZero ())
- {
- for (NetworkRoutesI j = m_networkRoutes.begin () ; j != m_networkRoutes.end () ; j++)
{
- Ipv6RoutingTableEntry* rtentry = j->first;
- Ipv6Prefix prefix = rtentry->GetDestNetworkPrefix ();
- Ipv6Address entry = rtentry->GetDestNetwork ();
+ for (NetworkRoutesI j = m_networkRoutes.begin () ; j != m_networkRoutes.end () ; j++)
+ {
+ Ipv6RoutingTableEntry* rtentry = j->first;
+ Ipv6Prefix prefix = rtentry->GetDestNetworkPrefix ();
+ Ipv6Address entry = rtentry->GetDestNetwork ();
- if (dst == entry && prefix == mask && rtentry->GetInterface () == interface)
- {
- delete j->first;
- m_networkRoutes.erase (j);
- }
+ if (dst == entry && prefix == mask && rtentry->GetInterface () == interface)
+ {
+ delete j->first;
+ m_networkRoutes.erase (j);
+ }
+ }
}
- }
else
- {
- /* default route case */
- RemoveRoute (dst, mask, interface, prefixToUse);
- }
+ {
+ /* default route case */
+ RemoveRoute (dst, mask, interface, prefixToUse);
+ }
}
Ipv6Address Ipv6StaticRouting::SourceAddressSelection (uint32_t interface, Ipv6Address dest)
@@ -734,21 +734,21 @@
ret = m_ipv6->GetAddress (interface, 0).GetAddress ();
if (dest == Ipv6Address::GetAllNodesMulticast () || dest == Ipv6Address::GetAllRoutersMulticast () || dest == Ipv6Address::GetAllHostsMulticast ())
- {
- return ret;
- }
+ {
+ return ret;
+ }
/* useally IPv6 interfaces have one link-local address and one global address */
for (uint32_t i = 1 ; i < m_ipv6->GetNAddresses (interface) ; i++)
- {
- Ipv6InterfaceAddress test = m_ipv6->GetAddress (interface, i);
+ {
+ Ipv6InterfaceAddress test = m_ipv6->GetAddress (interface, i);
- if (test.GetAddress ().CombinePrefix (test.GetPrefix ()) == dest.CombinePrefix (test.GetPrefix ()))
- {
- return test.GetAddress ();
+ if (test.GetAddress ().CombinePrefix (test.GetPrefix ()) == dest.CombinePrefix (test.GetPrefix ()))
+ {
+ return test.GetAddress ();
+ }
}
- }
return ret;
}
--- a/src/routing/static-routing/ipv6-static-routing.h Tue Dec 29 16:22:06 2009 -0800
+++ b/src/routing/static-routing/ipv6-static-routing.h Wed Dec 30 14:22:25 2009 +0100
@@ -55,242 +55,242 @@
*/
class Ipv6StaticRouting : public Ipv6RoutingProtocol
{
- public:
- /**
- * \brief The interface Id associated with this class.
- * \return type identifier
- */
- static TypeId GetTypeId ();
+public:
+ /**
+ * \brief The interface Id associated with this class.
+ * \return type identifier
+ */
+ static TypeId GetTypeId ();
- /**
- * \brief Constructor.
- */
- Ipv6StaticRouting ();
+ /**
+ * \brief Constructor.
+ */
+ Ipv6StaticRouting ();
- /**
- * \brief Destructor.
- */
- virtual ~Ipv6StaticRouting ();
+ /**
+ * \brief Destructor.
+ */
+ virtual ~Ipv6StaticRouting ();
- /**
- * \brief Add route to host.
- * \param dest destination address
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \param prefixToUse prefix that should be used for source address for this destination
- * \param metric metric of route in case of multiple routes to same destination
- */
- void AddHostRouteTo (Ipv6Address dest, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address ("::"), uint32_t metric = 0);
+ /**
+ * \brief Add route to host.
+ * \param dest destination address
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \param prefixToUse prefix that should be used for source address for this destination
+ * \param metric metric of route in case of multiple routes to same destination
+ */
+ void AddHostRouteTo (Ipv6Address dest, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address ("::"), uint32_t metric = 0);
- /**
- * \brief Add route to host.
- * \param dest destination address.
- * \param interface interface index
- * \param metric metric of route in case of multiple routes to same destination
- */
- void AddHostRouteTo (Ipv6Address dest, uint32_t interface, uint32_t metric = 0);
+ /**
+ * \brief Add route to host.
+ * \param dest destination address.
+ * \param interface interface index
+ * \param metric metric of route in case of multiple routes to same destination
+ */
+ void AddHostRouteTo (Ipv6Address dest, uint32_t interface, uint32_t metric = 0);
- /**
- * \brief Add route to network.
- * \param network network address
- * \param networkPrefix network prefix*
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \param metric metric of route in case of multiple routes to same destination
- */
- void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, uint32_t metric = 0);
+ /**
+ * \brief Add route to network.
+ * \param network network address
+ * \param networkPrefix network prefix*
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \param metric metric of route in case of multiple routes to same destination
+ */
+ void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, uint32_t metric = 0);
- /**
- * \brief Add route to network.
- * \param network network address
- * \param networkPrefix network prefix*
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \param prefixToUse prefix that should be used for source address for this destination
- * \param metric metric of route in case of multiple routes to same destination
- */
- void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse, uint32_t metric = 0);
+ /**
+ * \brief Add route to network.
+ * \param network network address
+ * \param networkPrefix network prefix*
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \param prefixToUse prefix that should be used for source address for this destination
+ * \param metric metric of route in case of multiple routes to same destination
+ */
+ void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse, uint32_t metric = 0);
- /**
- * \brief Add route to network.
- * \param network network address
- * \param networkPrefix network prefix
- * \param interface interface index
- * \param metric metric of route in case of multiple routes to same destination
- */
- void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface, uint32_t metric = 0);
+ /**
+ * \brief Add route to network.
+ * \param network network address
+ * \param networkPrefix network prefix
+ * \param interface interface index
+ * \param metric metric of route in case of multiple routes to same destination
+ */
+ void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface, uint32_t metric = 0);
- /**
- * \brief Set the default route.
- * \param nextHop next hop address to route the packet
- * \param interface interface index
- * \param prefixToUse prefix to use (i.e for multihoming)
- * \param metric metric of route in case of multiple routes to same destination
- */
- void SetDefaultRoute (Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address ("::"), uint32_t metric = 0);
+ /**
+ * \brief Set the default route.
+ * \param nextHop next hop address to route the packet
+ * \param interface interface index
+ * \param prefixToUse prefix to use (i.e for multihoming)
+ * \param metric metric of route in case of multiple routes to same destination
+ */
+ void SetDefaultRoute (Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address ("::"), uint32_t metric = 0);
- /**
- * \brief Get the number or entries in the routing table.
- * \return number of entries
- */
- uint32_t GetNRoutes ();
+ /**
+ * \brief Get the number or entries in the routing table.
+ * \return number of entries
+ */
+ uint32_t GetNRoutes ();
- /**
- * \brief Get the default route.
- *
- * If multiple default routes exist, the one with lowest metric is returned.
- * \return default Ipv6Route
- */
- Ipv6RoutingTableEntry GetDefaultRoute ();
+ /**
+ * \brief Get the default route.
+ *
+ * If multiple default routes exist, the one with lowest metric is returned.
+ * \return default Ipv6Route
+ */
+ Ipv6RoutingTableEntry GetDefaultRoute ();
- /**
- * \brief Get a specified route.
- * \param i index
- * \return the route whose index is i
- */
- Ipv6RoutingTableEntry GetRoute (uint32_t i);
+ /**
+ * \brief Get a specified route.
+ * \param i index
+ * \return the route whose index is i
+ */
+ Ipv6RoutingTableEntry GetRoute (uint32_t i);
- /**
- * \brief Get a metric for route from the static unicast routing table.
- * \param index The index (into the routing table) of the route to retrieve.
- * \return If route is set, the metric is returned. If not, an infinity metric (0xffffffff) is returned
- */
- uint32_t GetMetric (uint32_t index);
+ /**
+ * \brief Get a metric for route from the static unicast routing table.
+ * \param index The index (into the routing table) of the route to retrieve.
+ * \return If route is set, the metric is returned. If not, an infinity metric (0xffffffff) is returned
+ */
+ uint32_t GetMetric (uint32_t index);
- /**
- * \brief Remove a route from the routing table.
- * \param i index
- */
- void RemoveRoute (uint32_t i);
+ /**
+ * \brief Remove a route from the routing table.
+ * \param i index
+ */
+ void RemoveRoute (uint32_t i);
- /**
- * \brief Remove a route from the routing table.
- * \param network IPv6 network
- * \param prefix IPv6 prefix
- * \param ifIndex interface index
- * \param prefixToUse IPv6 prefix to use with this route (multihoming)
- */
- void RemoveRoute (Ipv6Address network, Ipv6Prefix prefix, uint32_t ifIndex, Ipv6Address prefixToUse);
+ /**
+ * \brief Remove a route from the routing table.
+ * \param network IPv6 network
+ * \param prefix IPv6 prefix
+ * \param ifIndex interface index
+ * \param prefixToUse IPv6 prefix to use with this route (multihoming)
+ */
+ void RemoveRoute (Ipv6Address network, Ipv6Prefix prefix, uint32_t ifIndex, Ipv6Address prefixToUse);
- /**
- * \brief Add a multicast route for a given multicast source and group.
- * \param origin IPv6 address of the source
- * \param group the multicast group address.
- * \param inputInterface the interface index
- * \param outputInterfaces the list of output interface indices over which the packet
- * should be sent (excluding the inputInterface).
- */
- void AddMulticastRoute (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector<uint32_t> outputInterfaces);
+ /**
+ * \brief Add a multicast route for a given multicast source and group.
+ * \param origin IPv6 address of the source
+ * \param group the multicast group address.
+ * \param inputInterface the interface index
+ * \param outputInterfaces the list of output interface indices over which the packet
+ * should be sent (excluding the inputInterface).
+ */
+ void AddMulticastRoute (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector<uint32_t> outputInterfaces);
- /**
- * \brief Set the default multicast route.
- * \param outputInterface default output interface
- */
- void SetDefaultMulticastRoute (uint32_t outputInterface);
+ /**
+ * \brief Set the default multicast route.
+ * \param outputInterface default output interface
+ */
+ void SetDefaultMulticastRoute (uint32_t outputInterface);
- /**
- * \brief Get the number of entries in the multicast routing table.
- * \return number of entries
- */
- uint32_t GetNMulticastRoutes () const;
+ /**
+ * \brief Get the number of entries in the multicast routing table.
+ * \return number of entries
+ */
+ uint32_t GetNMulticastRoutes () const;
- /**
- * \brief Get the specified multicast route.
- * \param i index
- * \return the route whose index is i
- */
- Ipv6MulticastRoutingTableEntry GetMulticastRoute (uint32_t i) const;
+ /**
+ * \brief Get the specified multicast route.
+ * \param i index
+ * \return the route whose index is i
+ */
+ Ipv6MulticastRoutingTableEntry GetMulticastRoute (uint32_t i) const;
- /**
- * \brief Remove a static multicast route.
- * \param origin IPv6 address of the source
- * \param group the multicast group address.
- * \param inputInterface the input interface index
- */
- bool RemoveMulticastRoute (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface);
+ /**
+ * \brief Remove a static multicast route.
+ * \param origin IPv6 address of the source
+ * \param group the multicast group address.
+ * \param inputInterface the input interface index
+ */
+ bool RemoveMulticastRoute (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface);
- /**
- * \brief Remove a multicast route.
- * \param i index of route to remove
- */
- void RemoveMulticastRoute (uint32_t i);
+ /**
+ * \brief Remove a multicast route.
+ * \param i index of route to remove
+ */
+ void RemoveMulticastRoute (uint32_t i);
- /**
- * \brief If the destination is already present in network destination list.
- * \param dest destination address
- * \param interfaceIndex interface index
- * \return true if dest is already in list, false otherwise
- */
- bool HasNetworkDest (Ipv6Address dest, uint32_t interfaceIndex);
+ /**
+ * \brief If the destination is already present in network destination list.
+ * \param dest destination address
+ * \param interfaceIndex interface index
+ * \return true if dest is already in list, false otherwise
+ */
+ bool HasNetworkDest (Ipv6Address dest, uint32_t interfaceIndex);
- virtual Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr);
+ virtual Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr);
- virtual bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
- UnicastForwardCallback ucb, MulticastForwardCallback mcb,
- LocalDeliverCallback lcb, ErrorCallback ecb);
+ virtual bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
+ UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+ LocalDeliverCallback lcb, ErrorCallback ecb);
- virtual void NotifyInterfaceUp (uint32_t interface);
- virtual void NotifyInterfaceDown (uint32_t interface);
- virtual void NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address);
- virtual void NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address);
- virtual void NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::GetZero ());
- virtual void NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::GetZero ());
- virtual void SetIpv6 (Ptr<Ipv6> ipv6);
+ virtual void NotifyInterfaceUp (uint32_t interface);
+ virtual void NotifyInterfaceDown (uint32_t interface);
+ virtual void NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address);
+ virtual void NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address);
+ virtual void NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::GetZero ());
+ virtual void NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::GetZero ());
+ virtual void SetIpv6 (Ptr<Ipv6> ipv6);
- protected:
- /**
- * \brief Dispose this object.
- */
- void DoDispose ();
+protected:
+ /**
+ * \brief Dispose this object.
+ */
+ void DoDispose ();
- private:
- typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> > NetworkRoutes;
- typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> >::const_iterator NetworkRoutesCI;
- typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> >::iterator NetworkRoutesI;
+private:
+ typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> > NetworkRoutes;
+ typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> >::const_iterator NetworkRoutesCI;
+ typedef std::list<std::pair <Ipv6RoutingTableEntry *, uint32_t> >::iterator NetworkRoutesI;
- typedef std::list<Ipv6MulticastRoutingTableEntry *> MulticastRoutes;
- typedef std::list<Ipv6MulticastRoutingTableEntry *>::const_iterator MulticastRoutesCI;
- typedef std::list<Ipv6MulticastRoutingTableEntry *>::iterator MulticastRoutesI;
+ typedef std::list<Ipv6MulticastRoutingTableEntry *> MulticastRoutes;
+ typedef std::list<Ipv6MulticastRoutingTableEntry *>::const_iterator MulticastRoutesCI;
+ typedef std::list<Ipv6MulticastRoutingTableEntry *>::iterator MulticastRoutesI;
- /**
- * \brief Lookup in the forwarding table for destination.
- * \param dest destination address
- * \param interface output interface if any (put 0 otherwise)
- * \return Ipv6Route to route the packet to reach dest address
- */
- Ptr<Ipv6Route> LookupStatic (Ipv6Address dest, Ptr<NetDevice> = 0);
+ /**
+ * \brief Lookup in the forwarding table for destination.
+ * \param dest destination address
+ * \param interface output interface if any (put 0 otherwise)
+ * \return Ipv6Route to route the packet to reach dest address
+ */
+ Ptr<Ipv6Route> LookupStatic (Ipv6Address dest, Ptr<NetDevice> = 0);
- /**
- * \brief Lookup in the multicast forwarding table for destination.
- * \param origin source address
- * \param group group multicast address
- * \param ifIndex interface index
- * \return Ipv6MulticastRoute to route the packet to reach dest address
- */
- Ptr<Ipv6MulticastRoute> LookupStatic (Ipv6Address origin, Ipv6Address group, uint32_t ifIndex);
+ /**
+ * \brief Lookup in the multicast forwarding table for destination.
+ * \param origin source address
+ * \param group group multicast address
+ * \param ifIndex interface index
+ * \return Ipv6MulticastRoute to route the packet to reach dest address
+ */
+ Ptr<Ipv6MulticastRoute> LookupStatic (Ipv6Address origin, Ipv6Address group, uint32_t ifIndex);
- /**
- * \brief Choose the source address to use with destination address.
- * \param interface interface index
- * \param dest IPv6 destination address
- * \return IPv6 source address to use
- */
- Ipv6Address SourceAddressSelection (uint32_t interface, Ipv6Address dest);
+ /**
+ * \brief Choose the source address to use with destination address.
+ * \param interface interface index
+ * \param dest IPv6 destination address
+ * \return IPv6 source address to use
+ */
+ Ipv6Address SourceAddressSelection (uint32_t interface, Ipv6Address dest);
- /**
- * \brief the forwarding table for network.
- */
- NetworkRoutes m_networkRoutes;
+ /**
+ * \brief the forwarding table for network.
+ */
+ NetworkRoutes m_networkRoutes;
- /**
- * \brief the forwarding table for multicast.
- */
- MulticastRoutes m_multicastRoutes;
+ /**
+ * \brief the forwarding table for multicast.
+ */
+ MulticastRoutes m_multicastRoutes;
- /**
- * \brief Ipv6 reference.
- */
- Ptr<Ipv6> m_ipv6;
+ /**
+ * \brief Ipv6 reference.
+ */
+ Ptr<Ipv6> m_ipv6;
};
} /* namespace ns3 */