22 #include "ns3/ipv6-route.h" 
   24 #include "ns3/ipv6-static-routing.h" 
   26 #include "ns3/simulator.h" 
   39     .SetGroupName (
"Internet")
 
   67       (*rprotoIter).second = 0;
 
   82       NS_LOG_LOGIC (
"Checking protocol " << (*i).second->GetInstanceTypeId () << 
" with priority " << (*i).first);
 
   84       route = (*i).second->RouteOutput (p, header, oif, sockerr);
 
  111   uint32_t iif = 
m_ipv6->GetInterfaceForDevice (idev);
 
  119       if (
m_ipv6->MulticastCheckGroup (iif, dst))
 
  123           NS_LOG_LOGIC (
"Multicast packet for me-- local deliver");
 
  127           lcb (packetCopy, header, iif);
 
  138       for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  142           NS_LOG_LOGIC (
"Multicast packet for me-- trying to forward");
 
  143           if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
 
  157   for (uint32_t j = 0; j < 
m_ipv6->GetNInterfaces (); j++)
 
  159       for (uint32_t i = 0; i < 
m_ipv6->GetNAddresses (j); i++)
 
  167                   NS_LOG_LOGIC (
"For me (destination " << addr << 
" match)");
 
  173               lcb (p, header, iif);
 
  180   if (
m_ipv6->IsForwarding (iif) == 
false)
 
  182       NS_LOG_LOGIC (
"Forwarding disabled for this interface");
 
  187   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  192       if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
 
  205   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  210       (*rprotoIter).second->NotifyInterfaceUp (interface);
 
  217   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  222       (*rprotoIter).second->NotifyInterfaceDown (interface);
 
  229   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  234       (*rprotoIter).second->NotifyAddAddress (interface, address);
 
  241   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  246       (*rprotoIter).second->NotifyRemoveAddress (interface, address);
 
  253   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  258       (*rprotoIter).second->NotifyAddRoute (dst, mask, nextHop, interface, prefixToUse);
 
  265   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  270       (*rprotoIter).second->NotifyRemoveRoute (dst, mask, nextHop, interface, prefixToUse);
 
  281                         << 
"Ipv6ListRouting table" << std::endl;
 
  285       *stream->
GetStream () << 
"  Priority: " << (*i).first << 
" Protocol: " << (*i).second->GetInstanceTypeId () << std::endl;
 
  286       (*i).second->PrintRoutingTable (stream);
 
  296   for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
 
  301       (*rprotoIter).second->SetIpv6 (ipv6);
 
  309   NS_LOG_FUNCTION (
this << routingProtocol->GetInstanceTypeId () << priority);
 
  314       routingProtocol->SetIpv6 (
m_ipv6);
 
  331       NS_FATAL_ERROR (
"Ipv6ListRouting::GetRoutingProtocol ():  index " << index << 
" out of range");
 
  334   for (Ipv6RoutingProtocolList::const_iterator rprotoIter = 
m_routingProtocols.begin ();
 
  339           priority = (*rprotoIter).first;
 
  340           return (*rprotoIter).second;
 
  349   return a.first > b.first;
 
virtual void NotifyRemoveAddress(uint32_t interface, Ipv6InterfaceAddress address)
Notify when specified interface add an address. 
 
Smart pointer class similar to boost::intrusive_ptr. 
 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
 
virtual uint32_t GetNRoutingProtocols(void) const 
Get the number of routing protocols. 
 
SocketErrno
Enumeration of the possible errors returned by a socket. 
 
bool IsLinkLocalMulticast() const 
If the IPv6 address is link-local multicast (ff02::/16). 
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
 
virtual Ptr< Ipv6Route > RouteOutput(Ptr< Packet > p, const Ipv6Header &header, Ptr< NetDevice > oif, Socket::SocketErrno &sockerr)
Query routing cache for an existing route, for an outbound packet. 
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
IPv6 address associated with an interface. 
 
bool IsEqual(const Ipv6Address &other) const 
Comparison operation between two Ipv6Addresses. 
 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
 
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function. 
 
virtual void AddRoutingProtocol(Ptr< Ipv6RoutingProtocol > routingProtocol, int16_t priority)
Register a new routing protocol to be used in this IPv4 stack. 
 
virtual void NotifyAddRoute(Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address::GetZero())
Notify a new route. 
 
Ptr< Ipv6 > m_ipv6
Ipv6 this protocol is associated with. 
 
virtual bool RouteInput(Ptr< const Packet > p, const Ipv6Header &header, Ptr< const NetDevice > idev, UnicastForwardCallback ucb, MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb)
Route an input packet (to be forwarded or locally delivered) 
 
static bool Compare(const Ipv6RoutingProtocolEntry &a, const Ipv6RoutingProtocolEntry &b)
Compare two routing protocols. 
 
virtual void NotifyRemoveRoute(Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address::GetZero())
Notify route removing. 
 
double GetSeconds(void) const 
Get an approximation of the time stored in this instance in the indicated unit. 
 
Ipv6Address GetAddress() const 
Get the IPv6 address. 
 
virtual void NotifyInterfaceUp(uint32_t interface)
Notify when specified interface goes UP. 
 
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC. 
 
virtual void SetIpv6(Ptr< Ipv6 > ipv6)
Typically, invoked directly or indirectly from ns3::Ipv6::SetRoutingProtocol. 
 
Ptr< Packet > Copy(void) const 
performs a COW copy of the packet. 
 
Ipv6ListRouting()
Constructor. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
bool IsMulticast() const 
If the IPv6 address is multicast (ff00::/8). 
 
std::pair< int16_t, Ptr< Ipv6RoutingProtocol > > Ipv6RoutingProtocolEntry
Container identifying an IPv6 Routing Protocol entry in the list. 
 
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream) const 
Print the Routing Table entries. 
 
virtual ~Ipv6ListRouting()
Destructor. 
 
static Time Now(void)
Return the current simulation virtual time. 
 
Describes an IPv6 address. 
 
static TypeId GetTypeId(void)
Get the type ID of this class. 
 
uint32_t GetId(void) const 
 
virtual void NotifyInterfaceDown(uint32_t interface)
Notify when specified interface goes DOWN. 
 
Describes an IPv6 prefix. 
 
Introspection did not find any typical Config paths. 
 
virtual void DoDispose(void)
Dispose this object. 
 
Abstract base class for Ipv6 routing protocols. 
 
a unique identifier for an interface. 
 
virtual Ptr< Ipv6RoutingProtocol > GetRoutingProtocol(uint32_t index, int16_t &priority) const 
Get pointer to routing protocol stored at index,. 
 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
 
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper. 
 
Ipv6RoutingProtocolList m_routingProtocols
List of routing protocols. 
 
virtual void NotifyAddAddress(uint32_t interface, Ipv6InterfaceAddress address)
Notify when specified interface add an address.