24 #include "ns3/packet.h"    25 #include "ns3/simulator.h"    26 #include "ns3/ipv6-route.h"    27 #include "ns3/net-device.h"    28 #include "ns3/names.h"    43     .SetGroupName (
"Internet")
    67   for (i = 0; i < 
m_ipv6->GetNInterfaces (); i++)
    87   *os << 
"Node: " << 
m_ipv6->GetObject<
Node> ()->GetId ()
    88       << 
", Time: " << 
Now().
As (unit)
    89       << 
", Local time: " << GetObject<Node> ()->GetLocalTime ().As (unit)
    90       << 
", Ipv6StaticRouting table" << std::endl;
    94       *os << 
"Destination                    Next Hop                   Flag Met Ref Use If" << std::endl;
    97           std::ostringstream dest, gw, mask, flags;
   100           *os << std::setiosflags (std::ios::left) << std::setw (31) << dest.str ();
   102           *os << std::setiosflags (std::ios::left) << std::setw (27) << gw.str ();
   112           *os << std::setiosflags (std::ios::left) << std::setw (5) << flags.str ();
   113           *os << std::setiosflags (std::ios::left) << std::setw (4) << 
GetMetric (j);
   134   NS_LOG_FUNCTION (
this << dst << nextHop << interface << prefixToUse << metric);
   137       NS_LOG_WARN (
"Ipv6StaticRouting::AddHostRouteTo - Next hop should be link-local");
   151   NS_LOG_FUNCTION (
this << network << networkPrefix << nextHop << interface << metric);
   159   NS_LOG_FUNCTION (
this << network << networkPrefix << nextHop << interface << prefixToUse << metric);
   162       NS_LOG_WARN (
"Ipv6StaticRouting::AddNetworkRouteTo - Next hop should be link-local");
   288   uint16_t longestMask = 0;
   289   uint32_t shortestMetric = 0xffffffff;
   294       NS_ASSERT_MSG (interface, 
"Try to send on link-local multicast address, and no interface index is given!");
   295       rtentry = Create<Ipv6Route> ();
   296       rtentry->SetSource (
m_ipv6->SourceAddressSelection (
m_ipv6->GetInterfaceForDevice (interface), dst));
   297       rtentry->SetDestination (dst);
   299       rtentry->SetOutputDevice (interface);
   306       uint32_t metric = it->second;
   311       NS_LOG_LOGIC (
"Searching for route to " << dst << 
", mask length " << maskLen << 
", metric " << metric);
   315           NS_LOG_LOGIC (
"Found global network route " << *j << 
", mask length " << maskLen << 
", metric " << metric);
   320               if (maskLen < longestMask)
   326               if (maskLen > longestMask)
   328                   shortestMetric = 0xffffffff;
   331               longestMask = maskLen;
   332               if (metric > shortestMetric)
   334                   NS_LOG_LOGIC (
"Equal mask length, but previous metric shorter, skipping");
   338               shortestMetric = metric;
   341               rtentry = Create<Ipv6Route> ();
   345                   rtentry->SetSource (
m_ipv6->SourceAddressSelection (interfaceIdx, route->
GetDest ()));
   353                   rtentry->SetSource (
m_ipv6->SourceAddressSelection (interfaceIdx, route->
GetGateway ()));
   356               rtentry->SetDestination (route->
GetDest ());
   358               rtentry->SetOutputDevice (
m_ipv6->GetNetDevice (interfaceIdx));
   369       NS_LOG_LOGIC (
"Matching route via " << rtentry->GetDestination () << 
" (Through " << rtentry->GetGateway () << 
") at the end");
   416           NS_LOG_LOGIC (
"Find source specific multicast route" << *i);
   424               mrtentry = Create<Ipv6MulticastRoute> ();
   425               mrtentry->SetGroup (route->
GetGroup ());
   426               mrtentry->SetOrigin (route->
GetOrigin ());
   452   uint32_t shortestMetric = 0xffffffff;
   458       uint32_t metric = it->second;
   468       if (metric > shortestMetric)
   472       shortestMetric = metric;
   594   uint32_t iif = 
m_ipv6->GetInterfaceForDevice (idev);
   608           mcb (idev, mrtentry, p, header); 
   619   if (
m_ipv6->IsForwarding (iif) == 
false)
   621       NS_LOG_LOGIC (
"Forwarding disabled for this interface");
   634       NS_LOG_LOGIC (
"Found unicast destination- calling unicast callback");
   635       ucb (idev, rtentry, p, header);  
   640       NS_LOG_LOGIC (
"Did not find unicast destination- returning false");
   647   for (uint32_t j = 0; j < 
m_ipv6->GetNAddresses (i); j++)
   660                                  m_ipv6->GetAddress (i, j).GetPrefix (), i);
   673       if (it->first->GetInterface () == i)
   687   if (!
m_ipv6->IsUp (interface))
   703   if (!
m_ipv6->IsUp (interface))
   715       if (it->first->GetInterface () == interface
   716           && it->first->IsNetwork ()
   717           && it->first->GetDestNetwork () == networkAddress
   718           && it->first->GetDestNetworkPrefix () == networkMask)
   732   NS_LOG_INFO (
this << dst << mask << nextHop << interface << prefixToUse);
   762           if (dst == entry && prefix == mask && rtentry->
GetInterface () == interface)
 static const uint32_t MAX_TTL
Maximum Time-To-Live (TTL). 
 
bool IsGateway() const
Is it the gateway ? 
 
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 ~Ipv6StaticRouting()
 
NetworkRoutes m_networkRoutes
the forwarding table for network. 
 
Ipv6Address GetGroup() const
Get the group. 
 
bool RemoveMulticastRoute(Ipv6Address origin, Ipv6Address group, uint32_t inputInterface)
Remove a static multicast route. 
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
 
Ipv6Address GetPrefixToUse() const
Get the prefix to use (for multihomed link). 
 
static Ipv6RoutingTableEntry CreateNetworkRouteTo(Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface)
Create a route to a network. 
 
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
 
virtual void NotifyRemoveRoute(Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address::GetZero())
Notify route removing. 
 
virtual void NotifyAddRoute(Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address::GetZero())
Notify a new route. 
 
A record of an IPv6 multicast route. 
 
virtual void SetIpv6(Ptr< Ipv6 > ipv6)
Typically, invoked directly or indirectly from ns3::Ipv6::SetRoutingProtocol. 
 
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. 
 
Ipv6MulticastRoutingTableEntry GetMulticastRoute(uint32_t i) const
Get the specified multicast route. 
 
std::list< Ipv6MulticastRoutingTableEntry * >::const_iterator MulticastRoutesCI
Const Iterator for container for the multicast routes. 
 
#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. 
 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
 
virtual void DoDispose(void)
Destructor implementation. 
 
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function. 
 
std::list< std::pair< Ipv6RoutingTableEntry *, uint32_t > >::iterator NetworkRoutesI
Iterator for container for the network routes. 
 
TimeWithUnit As(const enum Unit unit) const
Attach a unit to a Time, to facilitate output in a specific unit. 
 
Ipv6RoutingTableEntry GetRoute(uint32_t i) const
Get a specified route. 
 
static Ipv6MulticastRoutingTableEntry CreateMulticastRoute(Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector< uint32_t > outputInterfaces)
Create a multicast route. 
 
static Ipv6Prefix GetZero()
Get the zero prefix ( /0). 
 
uint32_t GetNMulticastRoutes() const
Get the number of entries in the multicast routing table. 
 
SocketErrno
Enumeration of the possible errors returned by a socket. 
 
Ipv6Address GetDestNetwork() const
Get the destination network. 
 
bool IsMatch(Ipv6Address a, Ipv6Address b) const
If the Address match the type. 
 
void AddHostRouteTo(Ipv6Address dest, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address("::"), uint32_t metric=0)
Add route to host. 
 
Ipv6Address GetOrigin() const
Get the source of this route. 
 
static TypeId GetTypeId()
The interface Id associated with this class. 
 
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const
Print the Routing Table entries. 
 
A record of an IPv6 route. 
 
Ipv6Address GetDest() const
Get the destination. 
 
Ptr< Ipv6 > m_ipv6
Ipv6 reference. 
 
virtual void NotifyInterfaceDown(uint32_t interface)
Notify when specified interface goes DOWN. 
 
bool IsHost() const
Is the route entry correspond to a host ? 
 
Ptr< Ipv6Route > LookupStatic(Ipv6Address dest, Ptr< NetDevice >=0)
Lookup in the forwarding table for destination. 
 
static Ipv6Address GetZero()
Get the 0 (::) Ipv6Address. 
 
void AddMulticastRoute(Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector< uint32_t > outputInterfaces)
Add a multicast route for a given multicast source and group. 
 
Unit
The unit to use to interpret a number representing time. 
 
virtual void NotifyRemoveAddress(uint32_t interface, Ipv6InterfaceAddress address)
Notify when specified interface add an address. 
 
bool IsLinkLocal() const
If the IPv6 address is a link-local address (fe80::/64). 
 
void AddNetworkRouteTo(Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, uint32_t metric=0)
Add route to network. 
 
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) 
 
Ipv6Address GetGateway() const
Get the gateway. 
 
virtual void NotifyInterfaceUp(uint32_t interface)
Notify when specified interface goes UP. 
 
Static routing protocol for IP version 6 stacks. 
 
uint32_t GetNRoutes() const
Get the number or entries in the routing table. 
 
bool IsMulticast() const
If the IPv6 address is multicast (ff00::/8). 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
static const uint32_t IF_ANY
Any interface magic number. 
 
Ipv6RoutingTableEntry GetDefaultRoute()
Get the default route. 
 
uint8_t GetPrefixLength() const
Get prefix length. 
 
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
 
bool IsLinkLocalMulticast() const
If the IPv6 address is link-local multicast (ff02::/16). 
 
Describes an IPv6 address. 
 
void RemoveRoute(uint32_t i)
Remove a route from the routing table. 
 
void SetDefaultRoute(Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address("::"), uint32_t metric=0)
Set the default route. 
 
static Ipv6Prefix GetOnes()
Get the "all-1" IPv6 mask (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff). 
 
uint32_t GetInputInterface() const
Get the input interface address. 
 
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN. 
 
uint32_t GetMetric(uint32_t index) const
Get a metric for route from the static unicast routing table. 
 
virtual void DoDispose()
Dispose this object. 
 
void SetDefaultMulticastRoute(uint32_t outputInterface)
Set the default multicast route. 
 
static std::string FindName(Ptr< Object > object)
Given a pointer to an object, look to see if that object has a name associated with it and...
 
virtual void NotifyAddAddress(uint32_t interface, Ipv6InterfaceAddress address)
Notify when specified interface add an address. 
 
std::list< std::pair< Ipv6RoutingTableEntry *, uint32_t > >::const_iterator NetworkRoutesCI
Const Iterator for container for the network routes. 
 
Describes an IPv6 prefix. 
 
Time Now(void)
create an ns3::Time instance which contains the current simulation time. 
 
MulticastRoutes m_multicastRoutes
the forwarding table for multicast. 
 
Ipv6Prefix GetDestNetworkPrefix() const
Get the destination prefix. 
 
bool IsNull(void) const
Check for null implementation. 
 
Abstract base class for IPv6 routing protocols. 
 
a unique identifier for an interface. 
 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
 
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper. 
 
bool HasNetworkDest(Ipv6Address dest, uint32_t interfaceIndex)
If the destination is already present in network destination list. 
 
uint32_t GetNOutputInterfaces() const
Get the number of output interfaces of this route. 
 
bool IsAny() const
If the IPv6 address is the "Any" address. 
 
std::list< Ipv6MulticastRoutingTableEntry * >::iterator MulticastRoutesI
Iterator for container for the multicast routes. 
 
uint32_t GetInterface() const
Get the interface index. 
 
uint32_t GetOutputInterface(uint32_t n) const
Get a specified output interface.