24 #include "ns3/abort.h" 
   25 #include "ns3/assert.h" 
   26 #include "ns3/unused.h" 
   27 #include "ns3/random-variable-stream.h" 
   28 #include "ns3/ipv4-route.h" 
   30 #include "ns3/names.h" 
   31 #include "ns3/rip-header.h" 
   32 #include "ns3/udp-header.h" 
   34 #include "ns3/uinteger.h" 
   35 #include "ns3/ipv4-packet-info-tag.h" 
   36 #include "ns3/loopback-net-device.h" 
   38 #define RIP_ALL_NODE "224.0.0.9" 
   48   : m_ipv4 (0), m_splitHorizonStrategy (
Rip::POISON_REVERSE), m_initialized (false)
 
   50   m_rng = CreateObject<UniformRandomVariable> ();
 
   62     .SetGroupName (
"Internet")
 
   63     .AddConstructor<
Rip> ()
 
   64     .AddAttribute (
"UnsolicitedRoutingUpdate", 
"The time between two Unsolicited Routing Updates.",
 
   68     .AddAttribute (
"StartupDelay", 
"Maximum random delay for protocol startup (send route requests).",
 
   72     .AddAttribute (
"TimeoutDelay", 
"The delay to invalidate a route.",
 
   76     .AddAttribute (
"GarbageCollectionDelay", 
"The delay to delete an expired route.",
 
   80     .AddAttribute (
"MinTriggeredCooldown", 
"Min cooldown delay after a Triggered Update.",
 
   84     .AddAttribute (
"MaxTriggeredCooldown", 
"Max cooldown delay after a Triggered Update.",
 
   88     .AddAttribute (
"SplitHorizon", 
"Split Horizon strategy.",
 
   94     .AddAttribute (
"LinkDownValue", 
"Value for link down in count to infinity.",
 
   97                    MakeUintegerChecker<uint32_t> ())
 
  114   bool addedGlobal = 
false;
 
  122   for (uint32_t i = 0 ; i < 
m_ipv4->GetNInterfaces (); i++)
 
  130       bool activeInterface = 
false;
 
  133           activeInterface = 
true;
 
  134           m_ipv4->SetForwarding (i, 
true);
 
  137       for (uint32_t j = 0; j < 
m_ipv4->GetNAddresses (i); j++)
 
  147               socket->BindToNetDevice (
m_ipv4->GetNetDevice (i));
 
  148               int ret = socket->Bind (local);
 
  150               socket->SetIpRecvTtl (
true);
 
  167       m_recvSocket->Bind (local);
 
  169       m_recvSocket->SetIpRecvTtl (
true);
 
  170       m_recvSocket->SetRecvPktInfo (
true);
 
  204   rtentry = 
Lookup (destination, oif);
 
  225   uint32_t iif = 
m_ipv4->GetInterfaceForDevice (idev);
 
  233           lcb (p, header, iif);
 
  255       NS_LOG_LOGIC (
"Dropping packet not for me and with dst Broadcast");
 
  264   if (
m_ipv4->IsForwarding (iif) == 
false)
 
  266       NS_LOG_LOGIC (
"Forwarding disabled for this interface");
 
  279       NS_LOG_LOGIC (
"Found unicast destination - calling unicast callback");
 
  280       ucb (rtentry, p, header);  
 
  285       NS_LOG_LOGIC (
"Did not find unicast destination - returning false");
 
  300   for (uint32_t j = 0; j < 
m_ipv4->GetNAddresses (i); j++)
 
  318   bool sendSocketFound = 
false;
 
  321       if (iter->second == i)
 
  323           sendSocketFound = 
true;
 
  328   bool activeInterface = 
false;
 
  331       activeInterface = 
true;
 
  332       m_ipv4->SetForwarding (i, 
true);
 
  335   for (uint32_t j = 0; j < 
m_ipv4->GetNAddresses (i); j++)
 
  346           socket->BindToNetDevice (
m_ipv4->GetNetDevice (i));
 
  347           socket->Bind (local);
 
  348           socket->SetIpRecvTtl (
true);
 
  364       m_recvSocket->Bind (local);
 
  366       m_recvSocket->SetIpRecvTtl (
true);
 
  367       m_recvSocket->SetRecvPktInfo (
true);
 
  378       if (it->first->GetInterface () == interface)
 
  386       NS_LOG_INFO (
"Checking socket for interface " << interface);
 
  387       if (iter->second == interface)
 
  389           NS_LOG_INFO (
"Removed socket for interface " << interface);
 
  390           iter->first->Close ();
 
  406   if (!
m_ipv4->IsUp (interface))
 
  431   if (!
m_ipv4->IsUp (interface))
 
  448       if (it->first->GetInterface () == interface
 
  449           && it->first->IsNetwork ()
 
  450           && it->first->GetDestNetwork () == networkAddress
 
  451           && it->first->GetDestNetworkMask () == networkMask)
 
  472   for (i = 0; i < 
m_ipv4->GetNInterfaces (); i++)
 
  491   *os << 
"Node: " << 
m_ipv4->GetObject<
Node> ()->GetId ()
 
  492       << 
", Time: " << 
Now().
As (unit)
 
  493       << 
", Local time: " << GetObject<Node> ()->GetLocalTime ().As (unit)
 
  494       << 
", IPv4 RIP table" << std::endl;
 
  498       *os << 
"Destination     Gateway         Genmask         Flags Metric Ref    Use Iface" << std::endl;
 
  506               std::ostringstream dest, gw, mask, flags;
 
  508               *os << std::setiosflags (std::ios::left) << std::setw (16) << dest.str ();
 
  510               *os << std::setiosflags (std::ios::left) << std::setw (16) << gw.str ();
 
  512               *os << std::setiosflags (std::ios::left) << std::setw (16) << mask.str ();
 
  522               *os << std::setiosflags (std::ios::left) << std::setw (6) << flags.str ();
 
  523               *os << std::setiosflags (std::ios::left) << std::setw (7) << int(route->
GetRouteMetric ());
 
  560       iter->first->Close ();
 
  578   uint16_t longestMask = 0;
 
  583       NS_ASSERT_MSG (interface, 
"Try to send on local multicast address, and no interface index is given!");
 
  584       rtentry = Create<Ipv4Route> ();
 
  585       rtentry->
SetSource (
m_ipv4->SourceAddressSelection (
m_ipv4->GetInterfaceForDevice (interface), dst));
 
  602           NS_LOG_LOGIC (
"Searching for route to " << dst << 
", mask length " << maskLen);
 
  606               NS_LOG_LOGIC (
"Found global network route " << j << 
", mask length " << maskLen);
 
  611                   if (maskLen < longestMask)
 
  617                   longestMask = maskLen;
 
  621                   rtentry = Create<Ipv4Route> ();
 
  649   NS_LOG_FUNCTION (
this << network << networkPrefix << nextHop << interface);
 
  677       if (it->first == route)
 
  682           if (it->second.IsRunning ())
 
  684               it->second.Cancel ();
 
  690   NS_ABORT_MSG (
"RIP::InvalidateRoute - cannot find the route to update");
 
  699       if (it->first == route)
 
  706   NS_ABORT_MSG (
"RIP::DeleteRoute - cannot find the route to delete");
 
  717   NS_LOG_INFO (
"Received " << *packet << 
" from " << senderAddr);
 
  720   uint16_t senderPort = senderAddr.
GetPort ();
 
  725       NS_ABORT_MSG (
"No incoming interface on RIP message, aborting.");
 
  727   uint32_t incomingIf = interfaceInfo.
GetRecvIf ();
 
  728   Ptr<Node> node = this->GetObject<Node> ();
 
  730   uint32_t ipInterfaceIndex = 
m_ipv4->GetInterfaceForDevice (dev);
 
  735       NS_ABORT_MSG (
"No incoming Hop Count on RIP message, aborting.");
 
  737   uint8_t hopLimit = hoplimitTag.
GetTtl ();
 
  739   int32_t interfaceForAddress = 
m_ipv4->GetInterfaceForAddress (senderAddress);
 
  740   if (interfaceForAddress != -1)
 
  755       HandleRequests (hdr, senderAddress, senderPort, ipInterfaceIndex, hopLimit);
 
  766   NS_LOG_FUNCTION (
this << senderAddress << 
int (senderPort) << incomingInterface << 
int (hopLimit) << requestHdr);
 
  768   std::list<RipRte> rtes = requestHdr.
GetRteList ();
 
  776   if (rtes.size () == 1)
 
  779           rtes.begin ()->GetSubnetMask ().GetPrefixLength () == 0 &&
 
  780           rtes.begin ()->GetRouteMetric () == 
m_linkDown)
 
  790                   if (iter->second == incomingInterface)
 
  792                       sendingSocket = iter->first;
 
  795               NS_ASSERT_MSG (sendingSocket, 
"HandleRequest - Impossible to find a socket to send the reply");
 
  797               uint16_t mtu = 
m_ipv4->GetMtu (incomingInterface);
 
  818                   bool splitHorizoning = (rtIter->first->GetInterface () == incomingInterface);
 
  825                       (rtIter->first->GetInterface () != incomingInterface));
 
  827                   if ((isGlobal || isDefaultRoute) &&
 
  831                       rte.
SetPrefix (rtIter->first->GetDestNetwork ());
 
  886       for (std::list<RipRte>::iterator iter = rtes.begin ();
 
  887           iter != rtes.end (); iter++)
 
  898                   requestedAddress.
CombineMask (iter->GetSubnetMask ());
 
  899                   Ipv4Address rtAddress = rtIter->first->GetDestNetwork ();
 
  900                   rtAddress.
CombineMask (rtIter->first->GetDestNetworkMask ());
 
  902                   if (requestedAddress == rtAddress)
 
  904                       iter->SetRouteMetric (rtIter->first->GetRouteMetric ());
 
  905                       iter->SetRouteTag (rtIter->first->GetRouteTag ());
 
  915               iter->SetRouteTag (0);
 
  928   NS_LOG_FUNCTION (
this << senderAddress << incomingInterface << 
int (hopLimit) << hdr);
 
  932       NS_LOG_LOGIC (
"Ignoring an update message from an excluded interface: " << incomingInterface);
 
  939   for (std::list<RipRte>::iterator iter = rtes.begin ();
 
  940       iter != rtes.end (); iter++)
 
  942       if (iter->GetRouteMetric () == 0 || iter->GetRouteMetric () > 
m_linkDown)
 
  944           NS_LOG_LOGIC (
"Ignoring an update message with malformed metric: " << 
int (iter->GetRouteMetric ()));
 
  947       if (iter->GetPrefix ().IsLocalhost () ||
 
  948           iter->GetPrefix ().IsBroadcast () ||
 
  949           iter->GetPrefix ().IsMulticast ())
 
  951           NS_LOG_LOGIC (
"Ignoring an update message with wrong prefixes: " << iter->GetPrefix ());
 
  956   bool changed = 
false;
 
  958   for (std::list<RipRte>::iterator iter = rtes.begin ();
 
  959       iter != rtes.end (); iter++)
 
  961       Ipv4Mask rtePrefixMask = iter->GetSubnetMask ();
 
  966       uint32_t interfaceMetric = 1;
 
  971       uint64_t rteMetric = iter->GetRouteMetric () + interfaceMetric;
 
  981           if (it->first->GetDestNetwork () == rteAddr &&
 
  982               it->first->GetDestNetworkMask () == rtePrefixMask)
 
  985               if (rteMetric < it->
first->GetRouteMetric ())
 
  987                   if (senderAddress != it->first->GetGateway ())
 
  995                   it->first->SetRouteTag (iter->GetRouteTag ());
 
  996                   it->first->SetRouteChanged (
true);
 
  997                   it->second.Cancel ();
 
 1001               else if (rteMetric == it->first->GetRouteMetric ())
 
 1003                   if (senderAddress == it->first->GetGateway ())
 
 1005                       it->second.Cancel ();
 
 1019                           it->second.Cancel ();
 
 1025               else if (rteMetric > it->first->GetRouteMetric () && senderAddress == it->first->GetGateway ())
 
 1027                   it->second.Cancel ();
 
 1030                       it->first->SetRouteMetric (rteMetric);
 
 1032                       it->first->SetRouteTag (iter->GetRouteTag ());
 
 1033                       it->first->SetRouteChanged (
true);
 
 1034                       it->second.Cancel ();
 
 1047           NS_LOG_LOGIC (
"Received a RTE with new route, adding.");
 
 1072       uint32_t 
interface = iter->second;
 
 1076           uint16_t mtu = 
m_ipv4->GetMtu (interface);
 
 1089               bool splitHorizoning = (rtIter->first->GetInterface () == interface);
 
 1092               NS_LOG_DEBUG (
"Processing RT " << rtDestAddr << 
" " << 
int(rtIter->first->IsRouteChanged ()));
 
 1097                   (rtIter->first->GetInterface () != interface));
 
 1099               bool sameNetwork = 
false;
 
 1100               for (uint32_t index = 0; index < 
m_ipv4->GetNAddresses (interface); index++)
 
 1109               if ((isGlobal || isDefaultRoute) &&
 
 1110                   (periodic || rtIter->first->IsRouteChanged ()) &&
 
 1114                   rte.
SetPrefix (rtIter->first->GetDestNetwork ());
 
 1153       rtIter->first->SetRouteChanged (
false);
 
 1163       NS_LOG_LOGIC (
"Skipping Triggered Update due to cooldown");
 
 1218   std::map<uint32_t, uint8_t>::const_iterator iter = 
m_interfaceMetrics.find (interface);
 
 1221       return iter->second;
 
 1259       uint32_t 
interface = iter->second;
 
 1282   : m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
 
 1288     m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
 
 1294     m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
 
 1305   if (
m_tag != routeTag)
 
 1358   os << static_cast<const Ipv4RoutingTableEntry &>(rte);
 
void SetInterfaceExclusions(std::set< uint32_t > exceptions)
Set the set of interface excluded from the protocol. 
 
static Time GetDelayLeft(const EventId &id)
Get the remaining time until this event will execute. 
 
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer. 
 
Ptr< Ipv4 > m_ipv4
IPv4 reference. 
 
void HandleRequests(RipHeader hdr, Ipv4Address senderAddress, uint16_t senderPort, uint32_t incomingInterface, uint8_t hopLimit)
Handle RIP requests. 
 
void HandleResponses(RipHeader hdr, Ipv4Address senderAddress, uint32_t incomingInterface, uint8_t hopLimit)
Handle RIP responses. 
 
bool m_initialized
flag to allow socket's late-creation. 
 
Unit
The unit to use to interpret a number representing time. 
 
Ptr< Ipv4Route > RouteOutput(Ptr< Packet > p, const Ipv4Header &header, Ptr< NetDevice > oif, Socket::SocketErrno &sockerr)
Query routing cache for an existing route, for an outbound packet. 
 
void SendTriggeredRouteUpdate()
Send Triggered Routing Updates on all interfaces. 
 
virtual void DoInitialize(void)
Initialize() implementation. 
 
Simulation virtual time values and global simulation resolution. 
 
virtual void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address)
 
Ipv4Address GetIpv4(void) const 
 
static Ipv4Address GetAny(void)
 
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 "...
 
void SetStream(int64_t stream)
Specifies the stream number for the RngStream. 
 
void SetPrefix(Ipv4Address prefix)
Set the prefix. 
 
SocketErrno
Enumeration of the possible errors returned by a socket. 
 
Ipv4Mask GetMask(void) const 
Get the network mask. 
 
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message. 
 
Time m_garbageCollectionDelay
Delay before deleting an INVALID route. 
 
void SendUnsolicitedRouteUpdate(void)
Send Unsolicited Routing Updates on all interfaces. 
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
 
bool IsMatch(Ipv4Address a, Ipv4Address b) const 
 
Ptr< Ipv4Route > Lookup(Ipv4Address dest, Ptr< NetDevice >=0)
Lookup in the forwarding table for destination. 
 
Ipv4Address GetLocal(void) const 
Get the local address. 
 
virtual ~RipRoutingTableEntry()
 
a class to represent an Ipv4 address mask 
 
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
Time m_startupDelay
Random delay before protocol startup. 
 
uint32_t m_linkDown
Link down value. 
 
std::list< std::pair< RipRoutingTableEntry *, EventId > >::iterator RoutesI
Iterator for container for the network routes. 
 
void AddPacketTag(const Tag &tag) const 
Add a packet tag. 
 
std::map< uint32_t, uint8_t > m_interfaceMetrics
Map of interface metrics. 
 
bool IsLocalMulticast(void) const 
 
bool IsNull(void) const 
Check for null implementation. 
 
Status_e GetRouteStatus(void) const 
Get the route status. 
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
 
Ipv4Address GetDestNetwork(void) const 
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
bool IsMulticast(void) const 
 
Ipv4Address CombineMask(Ipv4Mask const &mask) const 
Combine this address with a network mask. 
 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
 
bool IsRunning(void) const 
This method is syntactic sugar for !IsExpired(). 
 
virtual void DoDispose(void)
Destructor implementation. 
 
RipRoutingTableEntry(void)
 
This class implements a tag that carries the socket-specific TTL of a packet to the IP layer...
 
Poison Reverse Split Horizon. 
 
a polymophic address class 
 
void SetRouteChanged(bool changed)
Set the route as changed. 
 
EventId m_nextUnsolicitedUpdate
Next Unsolicited Update event. 
 
bool IsRouteChanged(void) const 
Get the route changed status. 
 
void DoSendRouteUpdate(bool periodic)
Send Routing Updates on all interfaces. 
 
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
 
void SetRouteMetric(uint32_t routeMetric)
Set the route metric. 
 
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range. 
 
void SetSource(Ipv4Address src)
 
uint32_t GetInterface(void) const 
 
bool RouteInput(Ptr< const Packet > p, const Ipv4Header &header, Ptr< const NetDevice > idev, UnicastForwardCallback ucb, MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb)
Route an input packet (to be forwarded or locally delivered) 
 
double GetSeconds(void) const 
Get an approximation of the time stored in this instance in the indicated unit. 
 
Routes m_routes
the forwarding table for network. 
 
A record of an IPv4 routing table entry for Ipv4GlobalRouting and Ipv4StaticRouting. 
 
NS_ASSERT_MSG(false,"Ipv4AddressGenerator::MaskToIndex(): Impossible")
 
void InvalidateRoute(RipRoutingTableEntry *route)
Invalidate a route. 
 
virtual void DoDispose()
Dispose this object. 
 
void DeleteRoute(RipRoutingTableEntry *route)
Delete a route. 
 
Hold variables of type enum. 
 
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay. 
 
void SetTtl(uint8_t ttl)
Set the tag's TTL. 
 
AttributeValue implementation for Time. 
 
bool IsGateway(void) const 
 
uint8_t GetInterfaceMetric(uint32_t interface) const 
Get the metric for an interface. 
 
RIP Routing Protocol, defined in RFC 2453. 
 
void SetGateway(Ipv4Address gw)
 
uint32_t GetRecvIf(void) const 
Get the tag's receiving interface. 
 
Hold an unsigned integer type. 
 
static Ipv4Mask GetZero(void)
 
void SetRouteTag(uint16_t routeTag)
Set the route tag. 
 
bool IsBroadcast(void) const 
 
void SetSubnetMask(Ipv4Mask subnetMask)
Set the subnet mask. 
 
std::list< std::pair< RipRoutingTableEntry *, EventId > >::const_iterator RoutesCI
Const Iterator for container for the network routes. 
 
Ptr< NetDevice > GetDevice(uint32_t index) const 
Retrieve the index-th NetDevice associated to this node. 
 
std::set< uint32_t > m_interfaceExclusions
Set of excluded interfaces. 
 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
 
std::map< Ptr< Socket >, uint32_t >::iterator SocketListI
Socket list type iterator. 
 
static Ptr< Socket > CreateSocket(Ptr< Node > node, TypeId tid)
This method wraps the creation of sockets that is performed on a given node by a SocketFactory specif...
 
void AddNetworkRouteTo(Ipv4Address network, Ipv4Mask networkPrefix, Ipv4Address nextHop, uint32_t interface)
Add route to network. 
 
bool m_changed
route has been updated 
 
uint16_t GetRouteTag(void) const 
Get the route tag. 
 
Ipv4Address GetGateway(void) const 
 
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output 
 
void SetRouteMetric(uint8_t routeMetric)
Set the route metric. 
 
virtual uint32_t GetSerializedSize(void) const 
Get the serialized size of the packet. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
void SetRouteStatus(Status_e status)
Set the route status. 
 
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address. 
 
virtual void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address)
 
void SendRouteRequest()
Send Routing Request on all interfaces. 
 
void Receive(Ptr< Socket > socket)
Receive RIP packets. 
 
Rip v2 Routing Table Entry (RTE) - see RFC 2453. 
 
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const 
Print the Routing Table entries. 
 
Status_e m_status
route status 
 
virtual void NotifyInterfaceUp(uint32_t interface)
 
Ipv4Address GetDest(void) const 
 
uint8_t m_metric
route metric 
 
static Ipv4Address GetZero(void)
 
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
void DoInitialize()
Start protocol operation. 
 
Time m_unsolicitedUpdate
time between two Unsolicited Routing Updates 
 
void SetOutputDevice(Ptr< NetDevice > outputDevice)
Equivalent in Linux to dst_entry.dev. 
 
static TypeId GetTypeId(void)
Get the type ID. 
 
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
 
EventId m_nextTriggeredUpdate
Next Triggered Update event. 
 
This class implements Linux struct pktinfo in order to deliver ancillary information to the socket in...
 
Ipv4Address GetDestination(void) const 
 
Ptr< const AttributeChecker > MakeEnumChecker(int v1, std::string n1, int v2, std::string n2, int v3, std::string n3, int v4, std::string n4, int v5, std::string n5, int v6, std::string n6, int v7, std::string n7, int v8, std::string n8, int v9, std::string n9, int v10, std::string n10, int v11, std::string n11, int v12, std::string n12, int v13, std::string n13, int v14, std::string n14, int v15, std::string n15, int v16, std::string n16, int v17, std::string n17, int v18, std::string n18, int v19, std::string n19, int v20, std::string n20, int v21, std::string n21, int v22, std::string n22)
Make an EnumChecker pre-configured with a set of allowed values by name. 
 
Ipv4 addresses are stored in host order in this class. 
 
virtual void SetIpv4(Ptr< Ipv4 > ipv4)
 
SplitHorizonType_e m_splitHorizonStrategy
Split Horizon strategy. 
 
TimeWithUnit As(const enum Unit unit) const 
Attach a unit to a Time, to facilitate output in a specific unit. 
 
void AddDefaultRouteTo(Ipv4Address nextHop, uint32_t interface)
Add a default route to the router through the nextHop located on interface. 
 
a class to store IPv4 address information on an interface 
 
An identifier for simulation events. 
 
bool RemovePacketTag(Tag &tag)
Remove a packet tag. 
 
Ptr< Socket > m_recvSocket
receive socket 
 
Ipv4Address GetGateway(void) const 
 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
 
Time Seconds(double value)
Construct a Time in the indicated unit. 
 
uint8_t GetRouteMetric(void) const 
Get the route metric. 
 
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method. 
 
Ipv4InterfaceAddress::InterfaceAddressScope_e GetScope(void) const 
Get address scope. 
 
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...
 
void SetInterfaceMetric(uint32_t interface, uint8_t metric)
Set the metric for an interface. 
 
Abstract base class for IPv4 routing protocols. 
 
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer. 
 
void SetRouteTag(uint16_t routeTag)
Set the route tag. 
 
Time Now(void)
create an ns3::Time instance which contains the current simulation time. 
 
uint16_t GetPort(void) const 
 
virtual Ptr< Packet > RecvFrom(uint32_t maxSize, uint32_t flags, Address &fromAddress)=0
Read a single packet from the socket and retrieve the sender address. 
 
virtual void NotifyInterfaceDown(uint32_t interface)
 
uint8_t GetTtl(void) const 
Get the tag's TTL. 
 
Time m_minTriggeredUpdateDelay
Min cooldown delay after a Triggered Update. 
 
virtual int Close(void)=0
Close a socket. 
 
Ptr< UniformRandomVariable > m_rng
Rng stream. 
 
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
Ipv4Mask GetDestNetworkMask(void) const 
 
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. 
 
uint16_t GetPrefixLength(void) const 
 
void AddHeader(const Header &header)
Add header to this packet. 
 
void SetDestination(Ipv4Address dest)
 
Time m_maxTriggeredUpdateDelay
Max cooldown delay after a Triggered Update. 
 
SocketList m_sendSocketList
list of sockets for sending (socket, interface index) 
 
static TypeId LookupByName(std::string name)
Get a TypeId by name. 
 
Time m_timeoutDelay
Delay before invalidating a route. 
 
std::set< uint32_t > GetInterfaceExclusions() const 
Get the set of interface excluded from the protocol.