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);
   152               socket->SetIpRecvTtl (
true);
   153               socket->SetRecvPktInfo (
true);
   208   rtentry = 
Lookup (destination, oif);
   229   uint32_t iif = 
m_ipv4->GetInterfaceForDevice (idev);
   237           lcb (p, header, iif);
   259       NS_LOG_LOGIC (
"Dropping packet not for me and with dst Broadcast");
   268   if (
m_ipv4->IsForwarding (iif) == 
false)
   270       NS_LOG_LOGIC (
"Forwarding disabled for this interface");
   283       NS_LOG_LOGIC (
"Found unicast destination - calling unicast callback");
   284       ucb (rtentry, p, header);  
   289       NS_LOG_LOGIC (
"Did not find unicast destination - returning false");
   304   for (uint32_t j = 0; j < 
m_ipv4->GetNAddresses (i); j++)
   322   bool sendSocketFound = 
false;
   325       if (iter->second == i)
   327           sendSocketFound = 
true;
   332   bool activeInterface = 
false;
   335       activeInterface = 
true;
   336       m_ipv4->SetForwarding (i, 
true);
   339   for (uint32_t j = 0; j < 
m_ipv4->GetNAddresses (i); j++)
   350           socket->BindToNetDevice (
m_ipv4->GetNetDevice (i));
   351           socket->Bind (local);
   353           socket->SetIpRecvTtl (
true);
   354           socket->SetRecvPktInfo (
true);
   384       if (it->first->GetInterface () == interface)
   392       NS_LOG_INFO (
"Checking socket for interface " << interface);
   393       if (iter->second == interface)
   395           NS_LOG_INFO (
"Removed socket for interface " << interface);
   396           iter->first->Close ();
   412   if (!
m_ipv4->IsUp (interface))
   437   if (!
m_ipv4->IsUp (interface))
   454       if (it->first->GetInterface () == interface
   455           && it->first->IsNetwork ()
   456           && it->first->GetDestNetwork () == networkAddress
   457           && it->first->GetDestNetworkMask () == networkMask)
   478   for (i = 0; i < 
m_ipv4->GetNInterfaces (); i++)
   497   *os << 
"Node: " << 
m_ipv4->GetObject<
Node> ()->GetId ()
   498       << 
", Time: " << 
Now().
As (unit)
   499       << 
", Local time: " << GetObject<Node> ()->GetLocalTime ().As (unit)
   500       << 
", IPv4 RIP table" << std::endl;
   504       *os << 
"Destination     Gateway         Genmask         Flags Metric Ref    Use Iface" << std::endl;
   512               std::ostringstream dest, gw, mask, flags;
   514               *os << std::setiosflags (std::ios::left) << std::setw (16) << dest.str ();
   516               *os << std::setiosflags (std::ios::left) << std::setw (16) << gw.str ();
   518               *os << std::setiosflags (std::ios::left) << std::setw (16) << mask.str ();
   528               *os << std::setiosflags (std::ios::left) << std::setw (6) << flags.str ();
   529               *os << std::setiosflags (std::ios::left) << std::setw (7) << int(route->
GetRouteMetric ());
   566       iter->first->Close ();
   584   uint16_t longestMask = 0;
   589       NS_ASSERT_MSG (interface, 
"Try to send on local multicast address, and no interface index is given!");
   590       rtentry = Create<Ipv4Route> ();
   591       rtentry->
SetSource (
m_ipv4->SourceAddressSelection (
m_ipv4->GetInterfaceForDevice (interface), dst));
   608           NS_LOG_LOGIC (
"Searching for route to " << dst << 
", mask length " << maskLen);
   612               NS_LOG_LOGIC (
"Found global network route " << j << 
", mask length " << maskLen);
   617                   if (maskLen < longestMask)
   623                   longestMask = maskLen;
   627                   rtentry = Create<Ipv4Route> ();
   655   NS_LOG_FUNCTION (
this << network << networkPrefix << nextHop << interface);
   683       if (it->first == route)
   688           if (it->second.IsRunning ())
   690               it->second.Cancel ();
   696   NS_ABORT_MSG (
"RIP::InvalidateRoute - cannot find the route to update");
   705       if (it->first == route)
   712   NS_ABORT_MSG (
"RIP::DeleteRoute - cannot find the route to delete");
   726   uint16_t senderPort = senderAddr.
GetPort ();
   730       NS_LOG_LOGIC (
"Received a packet from the multicast socket");
   734       NS_LOG_LOGIC (
"Received a packet from one of the unicast sockets");
   740       NS_ABORT_MSG (
"No incoming interface on RIP message, aborting.");
   742   uint32_t incomingIf = interfaceInfo.
GetRecvIf ();
   743   Ptr<Node> node = this->GetObject<Node> ();
   745   uint32_t ipInterfaceIndex = 
m_ipv4->GetInterfaceForDevice (dev);
   750       NS_ABORT_MSG (
"No incoming Hop Count on RIP message, aborting.");
   752   uint8_t hopLimit = hoplimitTag.
GetTtl ();
   754   int32_t interfaceForAddress = 
m_ipv4->GetInterfaceForAddress (senderAddress);
   755   if (interfaceForAddress != -1)
   772       HandleRequests (hdr, senderAddress, senderPort, ipInterfaceIndex, hopLimit);
   783   NS_LOG_FUNCTION (
this << senderAddress << 
int (senderPort) << incomingInterface << 
int (hopLimit) << requestHdr);
   785   std::list<RipRte> rtes = requestHdr.
GetRteList ();
   793   if (rtes.size () == 1)
   796           rtes.begin ()->GetSubnetMask ().GetPrefixLength () == 0 &&
   797           rtes.begin ()->GetRouteMetric () == 
m_linkDown)
   807                   if (iter->second == incomingInterface)
   809                       sendingSocket = iter->first;
   812               NS_ASSERT_MSG (sendingSocket, 
"HandleRequest - Impossible to find a socket to send the reply");
   814               uint16_t mtu = 
m_ipv4->GetMtu (incomingInterface);
   835                   bool splitHorizoning = (rtIter->first->GetInterface () == incomingInterface);
   842                       (rtIter->first->GetInterface () != incomingInterface));
   844                   if ((isGlobal || isDefaultRoute) &&
   848                       rte.
SetPrefix (rtIter->first->GetDestNetwork ());
   903       for (std::list<RipRte>::iterator iter = rtes.begin ();
   904           iter != rtes.end (); iter++)
   915                   requestedAddress.
CombineMask (iter->GetSubnetMask ());
   916                   Ipv4Address rtAddress = rtIter->first->GetDestNetwork ();
   917                   rtAddress.
CombineMask (rtIter->first->GetDestNetworkMask ());
   919                   if (requestedAddress == rtAddress)
   921                       iter->SetRouteMetric (rtIter->first->GetRouteMetric ());
   922                       iter->SetRouteTag (rtIter->first->GetRouteTag ());
   932               iter->SetRouteTag (0);
   945   NS_LOG_FUNCTION (
this << senderAddress << incomingInterface << 
int (hopLimit) << hdr);
   949       NS_LOG_LOGIC (
"Ignoring an update message from an excluded interface: " << incomingInterface);
   956   for (std::list<RipRte>::iterator iter = rtes.begin ();
   957       iter != rtes.end (); iter++)
   959       if (iter->GetRouteMetric () == 0 || iter->GetRouteMetric () > 
m_linkDown)
   961           NS_LOG_LOGIC (
"Ignoring an update message with malformed metric: " << 
int (iter->GetRouteMetric ()));
   964       if (iter->GetPrefix ().IsLocalhost () ||
   965           iter->GetPrefix ().IsBroadcast () ||
   966           iter->GetPrefix ().IsMulticast ())
   968           NS_LOG_LOGIC (
"Ignoring an update message with wrong prefixes: " << iter->GetPrefix ());
   973   bool changed = 
false;
   975   for (std::list<RipRte>::iterator iter = rtes.begin ();
   976       iter != rtes.end (); iter++)
   978       Ipv4Mask rtePrefixMask = iter->GetSubnetMask ();
   983       uint32_t interfaceMetric = 1;
   988       uint64_t rteMetric = iter->GetRouteMetric () + interfaceMetric;
   998           if (it->first->GetDestNetwork () == rteAddr &&
   999               it->first->GetDestNetworkMask () == rtePrefixMask)
  1002               if (rteMetric < it->
first->GetRouteMetric ())
  1004                   if (senderAddress != it->first->GetGateway ())
  1012                   it->first->SetRouteTag (iter->GetRouteTag ());
  1013                   it->first->SetRouteChanged (
true);
  1014                   it->second.Cancel ();
  1018               else if (rteMetric == it->first->GetRouteMetric ())
  1020                   if (senderAddress == it->first->GetGateway ())
  1022                       it->second.Cancel ();
  1036                           it->second.Cancel ();
  1042               else if (rteMetric > it->first->GetRouteMetric () && senderAddress == it->first->GetGateway ())
  1044                   it->second.Cancel ();
  1047                       it->first->SetRouteMetric (rteMetric);
  1049                       it->first->SetRouteTag (iter->GetRouteTag ());
  1050                       it->first->SetRouteChanged (
true);
  1051                       it->second.Cancel ();
  1064           NS_LOG_LOGIC (
"Received a RTE with new route, adding.");
  1089       uint32_t 
interface = iter->
second;
  1093           uint16_t mtu = 
m_ipv4->GetMtu (interface);
  1106               bool splitHorizoning = (rtIter->first->GetInterface () == interface);
  1109               NS_LOG_DEBUG (
"Processing RT " << rtDestAddr << 
" " << 
int(rtIter->first->IsRouteChanged ()));
  1114                   (rtIter->first->GetInterface () != interface));
  1116               bool sameNetwork = 
false;
  1117               for (uint32_t index = 0; index < 
m_ipv4->GetNAddresses (interface); index++)
  1126               if ((isGlobal || isDefaultRoute) &&
  1127                   (periodic || rtIter->first->IsRouteChanged ()) &&
  1131                   rte.
SetPrefix (rtIter->first->GetDestNetwork ());
  1170       rtIter->first->SetRouteChanged (
false);
  1180       NS_LOG_LOGIC (
"Skipping Triggered Update due to cooldown");
  1235   std::map<uint32_t, uint8_t>::const_iterator iter = 
m_interfaceMetrics.find (interface);
  1238       return iter->second;
  1276       uint32_t 
interface = iter->
second;
  1299   : m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
  1305     m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
  1311     m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
  1322   if (
m_tag != routeTag)
  1375   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. 
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay. 
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 uint32_t GetSerializedSize(void) const
Get the serialized size of the packet. 
virtual void DoInitialize(void)
Initialize() implementation. 
Simulation virtual time values and global simulation resolution. 
virtual void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address)
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. 
Ptr< Socket > m_multicastRecvSocket
multicast receive socket 
#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. 
bool IsBroadcast(void) const
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
bool IsMatch(Ipv4Address a, Ipv4Address b) const
SocketList m_unicastSocketList
list of sockets for unicast messages (socket, interface index) 
Ptr< Ipv4Route > Lookup(Ipv4Address dest, Ptr< NetDevice >=0)
Lookup in the forwarding table for destination. 
virtual ~RipRoutingTableEntry()
a class to represent an Ipv4 address mask 
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node. 
uint32_t GetRecvIf(void) const
Get the tag's receiving interface. 
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. 
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit. 
std::map< uint32_t, uint8_t > m_interfaceMetrics
Map of interface metrics. 
#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. 
Ipv4Address GetDest(void) const
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
virtual void DoDispose(void)
Destructor implementation. 
RipRoutingTableEntry(void)
TimeWithUnit As(const enum Unit unit) const
Attach a unit to a Time, to facilitate output in a specific unit. 
Ipv4Address GetDestNetwork(void) const
This class implements a tag that carries the socket-specific TTL of a packet to the IP layer...
SocketErrno
Enumeration of the possible errors returned by a socket. 
Ipv4Address GetGateway(void) const
a polymophic address class 
void SetRouteChanged(bool changed)
Set the route as changed. 
EventId m_nextUnsolicitedUpdate
Next Unsolicited Update event. 
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. 
void SetSource(Ipv4Address src)
void SetRecvPktInfo(bool flag)
Enable/Disable receive packet information to socket. 
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) 
bool IsMulticast(void) const
Routes m_routes
the forwarding table for network. 
Ipv4Mask GetDestNetworkMask(void) const
A record of an IPv4 routing table entry for Ipv4GlobalRouting and Ipv4StaticRouting. 
void InvalidateRoute(RipRoutingTableEntry *route)
Invalidate a route. 
virtual void DoDispose()
Dispose this object. 
void DeleteRoute(RipRoutingTableEntry *route)
Delete a route. 
uint8_t GetInterfaceMetric(uint32_t interface) const
Get the metric for an interface. 
Hold variables of type enum. 
Ipv4Address CombineMask(Ipv4Mask const &mask) const
Combine this address with a network mask. 
void SetTtl(uint8_t ttl)
Set the tag's TTL. 
  AttributeValue implementation for Time. 
RIP Routing Protocol, defined in RFC 2453. 
void SetGateway(Ipv4Address gw)
Hold an unsigned integer type. 
static Ipv4Mask GetZero(void)
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void SetRouteTag(uint16_t routeTag)
Set the route tag. 
Unit
The unit to use to interpret a number representing time. 
void SetSubnetMask(Ipv4Mask subnetMask)
Set the subnet mask. 
bool IsLocalMulticast(void) const
std::list< std::pair< RipRoutingTableEntry *, EventId > >::const_iterator RoutesCI
Const Iterator for container for the network routes. 
std::set< uint32_t > m_interfaceExclusions
Set of excluded interfaces. 
Ipv4Address GetDestination(void) const
std::map< Ptr< Socket >, uint32_t >::iterator SocketListI
Socket list type iterator. 
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read. 
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 
Ipv4Mask GetMask(void) const
Get the network mask. 
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC. 
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 int Bind(const Address &address)=0
Allocate a local endpoint for this socket. 
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. 
uint32_t GetInterface(void) const
virtual void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address)
void SendRouteRequest()
Send Routing Request on all interfaces. 
uint16_t GetPort(void) const
void Receive(Ptr< Socket > socket)
Receive RIP packets. 
Rip v2 Routing Table Entry (RTE) - see RFC 2453. 
Status_e m_status
route status 
virtual void NotifyInterfaceUp(uint32_t interface)
std::set< uint32_t > GetInterfaceExclusions() const
Get the set of interface excluded from the protocol. 
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...
Ipv4InterfaceAddress::InterfaceAddressScope_e GetScope(void) const
Get address scope. 
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. 
EventId m_nextTriggeredUpdate
Next Triggered Update event. 
This class implements Linux struct pktinfo in order to deliver ancillary information to the socket in...
Ipv4Address GetGateway(void) const
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ipv4 addresses are stored in host order in this class. 
virtual void SetIpv4(Ptr< Ipv4 > ipv4)
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const
Print the Routing Table entries. 
uint16_t GetRouteTag(void) const
Get the route tag. 
SplitHorizonType_e m_splitHorizonStrategy
Split Horizon strategy. 
Poison Reverse Split Horizon. 
void AddDefaultRouteTo(Ipv4Address nextHop, uint32_t interface)
Add a default route to the router through the nextHop located on interface. 
Status_e GetRouteStatus(void) const
Get the route status. 
a class to store IPv4 address information on an interface 
An identifier for simulation events. 
void AddPacketTag(const Tag &tag) const
Add a packet tag. 
bool RemovePacketTag(Tag &tag)
Remove a packet tag. 
#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. 
bool IsGateway(void) const
bool IsRunning(void) const
This method is syntactic sugar for !IsExpired(). 
void SetIpRecvTtl(bool ipv4RecvTtl)
Tells a socket to pass information about IP_TTL up the stack. 
bool IsRouteChanged(void) const
Get the route changed status. 
Ptr< const AttributeChecker > MakeEnumChecker(int v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name. 
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method. 
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...
Ipv4Address GetLocal(void) const
Get the local address. 
void SetInterfaceMetric(uint32_t interface, uint8_t metric)
Set the metric for an interface. 
Abstract base class for IPv4 routing protocols. 
uint16_t GetPrefixLength(void) const
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range. 
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. 
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)
Time m_minTriggeredUpdateDelay
Min cooldown delay after a Triggered Update. 
virtual int Close(void)=0
Close a socket. 
bool IsNull(void) const
Check for null implementation. 
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...
a unique identifier for an interface. 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
uint8_t GetRouteMetric(void) const
Get the route metric. 
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper. 
void AddHeader(const Header &header)
Add header to this packet. 
uint8_t GetTtl(void) const
Get the tag's TTL. 
void SetDestination(Ipv4Address dest)
Ipv4Address GetIpv4(void) const
Time m_maxTriggeredUpdateDelay
Max cooldown delay after a Triggered Update. 
static TypeId LookupByName(std::string name)
Get a TypeId by name. 
Time m_timeoutDelay
Delay before invalidating a route.