35 #include "ns3/inet-socket-address.h"    36 #include "ns3/trace-source-accessor.h"    37 #include "ns3/udp-socket-factory.h"    38 #include "ns3/boolean.h"    39 #include "ns3/double.h"    40 #include "ns3/uinteger.h"    77     static TypeId tid = 
TypeId (
"ns3::dsdv::DeferredRouteOutputTag")
    79       .SetGroupName (
"Dsdv")
    94     return sizeof(int32_t);
   112     os << 
"DeferredRouteOutputTag: output interface = " << 
oif;
   119   static TypeId tid = 
TypeId (
"ns3::dsdv::RoutingProtocol")
   121     .SetGroupName (
"Dsdv")
   123     .AddAttribute (
"PeriodicUpdateInterval",
"Periodic interval between exchange of full routing tables among nodes. ",
   127     .AddAttribute (
"SettlingTime", 
"Minimum time an update is to be stored in adv table before sending out"   128                    "in case of change in metric (in seconds)",
   132     .AddAttribute (
"MaxQueueLen", 
"Maximum number of packets that we allow a routing protocol to buffer.",
   135                    MakeUintegerChecker<uint32_t> ())
   136     .AddAttribute (
"MaxQueuedPacketsPerDst", 
"Maximum number of packets that we allow per destination to buffer.",
   139                    MakeUintegerChecker<uint32_t> ())
   140     .AddAttribute (
"MaxQueueTime",
"Maximum time packets can be queued (in seconds)",
   144     .AddAttribute (
"EnableBuffering",
"Enables buffering of data packets if no route to destination is available",
   149     .AddAttribute (
"EnableWST",
"Enables Weighted Settling Time for the updates before advertising",
   154     .AddAttribute (
"Holdtimes",
"Times the forwarding Interval to purge the route.",
   157                    MakeUintegerChecker<uint32_t> ())
   158     .AddAttribute (
"WeightedFactor",
"WeightedFactor for the settling time if Weighted Settling Time is enabled",
   161                    MakeDoubleChecker<double> ())
   162     .AddAttribute (
"EnableRouteAggregation",
"Enables Weighted Settling Time for the updates before advertising",
   167     .AddAttribute (
"RouteAggregationTime",
"Time to aggregate updates before sending them out (in seconds)",
   215     m_advRoutingTable (),
   217     m_periodicUpdateTimer (
Timer::CANCEL_ON_DESTROY)
   233       iter->first->Close ();
   243                         << 
", Time: " << 
Now ().
As (unit)
   244                         << 
", Local time: " << GetObject<Node> ()->GetLocalTime ().As (unit)
   245                         << 
", DSDV Routing table" << std::endl;
   284   std::map<Ipv4Address, RoutingTableEntry> removedAddresses;
   289                                 << 
", Packet id: " << p->
GetUid () << 
", Destination address in Packet: " << dst);
   292   for (std::map<Ipv4Address, RoutingTableEntry>::iterator rmItr = removedAddresses.begin ();
   293        rmItr != removedAddresses.end (); ++rmItr)
   295       rmItr->second.SetEntriesChanged (
true);
   296       rmItr->second.SetSeqNo (rmItr->second.GetSeqNo () + 1);
   299   if (!removedAddresses.empty ())
   309       if (rt.GetHop () == 1)
   311           route = rt.GetRoute ();
   314                                                << 
" to neighboring destination "   332                                                    << 
" to destination " << dst << 
" via "   333                                                    << rt.GetNextHop ());
   347       uint32_t iif = (oif ? 
m_ipv4->GetInterfaceForDevice (oif) : -1);
   360                                       UnicastForwardCallback ucb,
   377                              UnicastForwardCallback ucb,
   394   int32_t iif = 
m_ipv4->GetInterfaceForDevice (idev);
   434               if (lcb.
IsNull () == 
false)
   437                   lcb (p, header, iif);
   442                   NS_LOG_ERROR (
"Unable to deliver packet locally due to null callback " << p->
GetUid () << 
" from " << origin);
   452                       ucb (route,packet,header);
   464   if (
m_ipv4->IsDestinationAddress (dst, iif))
   466       if (lcb.
IsNull () == 
false)
   469           lcb (p, header, iif);
   473           NS_LOG_ERROR (
"Unable to deliver packet locally due to null callback " << p->
GetUid () << 
" from " << origin);
   480   if (
m_ipv4->IsForwarding (iif) == 
false)
   482       NS_LOG_LOGIC (
"Forwarding disabled for this interface");
   497                                       << 
" via nexthop neighbor " << toDst.
GetNextHop ());
   498           ucb (route,p,header);
   503                                << 
" as there is no route to forward it.");
   537           int32_t 
interface = 
m_ipv4->GetInterfaceForAddress (addr);
   538           if (oif == 
m_ipv4->GetNetDevice (static_cast<uint32_t> (interface)))
   567                                  << 
" and packet id: " << packet->GetUid ());
   573       packet->RemoveHeader (dsdvHeader);
   580           if (dsdvHeader.
GetDst () == interface.GetLocal ())
   584                   NS_LOG_DEBUG (
"Sent Dsdv update back to the same Destination, "   585                                 "with infinite metric. Time left to send fwd update: "   591                   NS_LOG_DEBUG (
"Received update for my address. Discarding this.");
   601                     << sender << 
" to " << receiver << 
". Details are: Destination: " << dsdvHeader.
GetDst () << 
", Seq No: "   606       if (permanentTableVerifier == 
false)
   615                  m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0),
   629               NS_LOG_DEBUG (
"Discarding this update as this route is not present in "   630                             "main routing table and received with infinite metric");
   638               std::map<Ipv4Address, RoutingTableEntry> allRoutes;
   640               for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator i = allRoutes.begin (); i != allRoutes.end (); ++i)
   642                   NS_LOG_DEBUG (
"ADV table routes are:" << i->second.GetDestination ());
   650               if (dsdvHeader.
GetDstSeqno () > advTableEntry.GetSeqNo ())
   655                       NS_LOG_DEBUG (
"Canceling the timer to update route with better seq number");
   658                   if (dsdvHeader.
GetHopCount () != advTableEntry.GetHop ())
   660                       advTableEntry.SetSeqNo (dsdvHeader.
GetDstSeqno ());
   662                       advTableEntry.SetFlag (
VALID);
   663                       advTableEntry.SetEntriesChanged (
true);
   664                       advTableEntry.SetNextHop (sender);
   666                       NS_LOG_DEBUG (
"Received update with better sequence number and changed metric.Waiting for WST");
   668                       advTableEntry.SetSettlingTime (tempSettlingtime);
   670                                                            << 
"s as there is no event running for this route");
   681                       advTableEntry.SetSeqNo (dsdvHeader.
GetDstSeqno ());
   683                       advTableEntry.SetFlag (
VALID);
   684                       advTableEntry.SetEntriesChanged (
true);
   685                       advTableEntry.SetNextHop (sender);
   688                       NS_LOG_DEBUG (
"Route with better sequence number and same metric received. Advertised without WST");
   691               else if (dsdvHeader.
GetDstSeqno () == advTableEntry.GetSeqNo ())
   693                   if (dsdvHeader.
GetHopCount () < advTableEntry.GetHop ())
   698                       NS_LOG_DEBUG (
"Canceling any existing timer to update route with same sequence number "   699                                     "and better hop count");
   701                       advTableEntry.SetSeqNo (dsdvHeader.
GetDstSeqno ());
   703                       advTableEntry.SetFlag (
VALID);
   704                       advTableEntry.SetEntriesChanged (
true);
   705                       advTableEntry.SetNextHop (sender);
   708                       advTableEntry.SetSettlingTime (tempSettlingtime);
   710                                                            << 
" as there is no current event running for this route");
   728                           if (advTableEntry.GetNextHop () == sender)
   736                       NS_LOG_DEBUG (
"Received update with same seq number and "   737                                     "same/worst metric for, " << dsdvHeader.
GetDst () << 
". Discarding the update.");
   747                   NS_LOG_DEBUG (dsdvHeader.
GetDst () << 
" : Received update with old seq number. Discarding the update.");
   752               NS_LOG_DEBUG (
"Route with infinite metric received for "   753                             << dsdvHeader.
GetDst () << 
" from " << sender);
   755               if (sender == advTableEntry.GetNextHop ())
   757                   NS_LOG_DEBUG (
"Triggering an update for this unreachable route:");
   758                   std::map<Ipv4Address, RoutingTableEntry> dstsWithNextHopSrc;
   761                   advTableEntry.SetSeqNo (dsdvHeader.
GetDstSeqno ());
   762                   advTableEntry.SetEntriesChanged (
true);
   764                   for (std::map<Ipv4Address, RoutingTableEntry>::iterator i = dstsWithNextHopSrc.begin (); i
   765                        != dstsWithNextHopSrc.end (); ++i)
   767                       i->second.SetSeqNo (i->second.GetSeqNo () + 1);
   768                       i->second.SetEntriesChanged (
true);
   780                                 " : Discard this link break update as it was received from a different neighbor "   781                                 "and I can reach the destination");
   786   std::map<Ipv4Address, RoutingTableEntry> allRoutes;
   803   std::map<Ipv4Address, RoutingTableEntry> allRoutes;
   812       for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator i = allRoutes.begin (); i != allRoutes.end (); ++i)
   814           NS_LOG_LOGIC (
"Destination: " << i->second.GetDestination ()
   815                                         << 
" SeqNo:" << i->second.GetSeqNo () << 
" HopCount:"   816                                         << i->second.GetHop () + 1);
   820               dsdvHeader.
SetDst (i->second.GetDestination ());
   823               temp.SetFlag (
VALID);
   824               temp.SetEntriesChanged (
false);
   826               if (!(temp.GetSeqNo () % 2))
   832               NS_LOG_DEBUG (
"Deleted this route from the advertised table");
   838               NS_LOG_DEBUG (
"EventID " << event.GetUid () << 
" associated with "   839                                        << temp.GetDestination () << 
" has not expired, waiting in adv table");
   846           dsdvHeader.
SetDst (
m_ipv4->GetAddress (1, 0).GetLocal ());
   849           NS_LOG_DEBUG (
"Adding my update as well to the packet");
   864                            << 
" with packet id : " << packet->
GetUid () << 
" and packet Size: " << packet->
GetSize ());
   868           NS_LOG_FUNCTION (
"Update not sent as there are no updates to be triggered");
   876   std::map<Ipv4Address, RoutingTableEntry> removedAddresses, allRoutes;
   880   if (allRoutes.empty ())
   891       for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator i = allRoutes.begin (); i != allRoutes.end (); ++i)
   894           if (i->second.GetHop () == 0)
   897               dsdvHeader.
SetDst (
m_ipv4->GetAddress (1,0).GetLocal ());
   898               dsdvHeader.
SetDstSeqno (i->second.GetSeqNo () + 2);
   907               dsdvHeader.
SetDst (i->second.GetDestination ());
   912           NS_LOG_DEBUG (
"Forwarding the update for " << i->first);
   916                                                                 << 
", LifeTime: " << i->second.GetLifeTime ().GetSeconds ());
   918       for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator rmItr = removedAddresses.begin (); rmItr
   919            != removedAddresses.end (); ++rmItr)
   922           removedHeader.
SetDst (rmItr->second.GetDestination ());
   923           removedHeader.
SetDstSeqno (rmItr->second.GetSeqNo () + 1);
   924           removedHeader.
SetHopCount (rmItr->second.GetHop () + 1);
   926           NS_LOG_DEBUG (
"Update for removed record is: Destination: " << removedHeader.
GetDst ()
   930       socket->
Send (packet);
   976                         << 
" interface is up");
   979   if (iface.GetLocal () == 
Ipv4Address (
"127.0.0.1"))
  1065       if (l3->GetNAddresses (i))
  1122   std::map<Ipv4Address, RoutingTableEntry> allRoutes;
  1124   for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator i = allRoutes.begin (); i != allRoutes.end (); ++i)
  1134                                                    << 
" to neighboring destination "  1167               NS_LOG_DEBUG (
"Output device doesn't match. Dropped.");
  1175       ucb (route,p,header);
  1203           NS_LOG_DEBUG (
"Calculated weightedTime:" << weightedTime.GetSeconds ());
  1204           return weightedTime;
  1213   NS_LOG_FUNCTION (
"Merging advertised table changes with main table before sending out periodic update");
  1214   std::map<Ipv4Address, RoutingTableEntry> allRoutes;
  1216   if (allRoutes.size () > 0)
  1218       for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator i = allRoutes.begin (); i != allRoutes.end (); ++i)
  1234               NS_LOG_DEBUG (
"Event currently running. Cannot Merge Routing Tables");
 
void Start()
Start protocol operation. 
static TypeId GetTypeId(void)
Get the type ID. 
Ptr< Ipv4Route > LoopbackRoute(const Ipv4Header &header, Ptr< NetDevice > oif) const
Create loopback route for given header. 
static const uint32_t DSDV_PORT
UDP Port for DSDV control traffic. 
static Ipv4Mask GetOnes(void)
uint64_t GetUid(void) const
Returns the packet's Uid. 
Simulation virtual time values and global simulation resolution. 
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
static Ipv4Address GetAny(void)
void SetEntriesChanged(bool entriesChanged)
Set entries changed indicator. 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
std::map< Ptr< Socket >, Ipv4InterfaceAddress > m_socketAddresses
Raw socket per each IP interface, map socket -> iface address (IP + mask) 
void SetStream(int64_t stream)
Specifies the stream number for the RngStream. 
uint32_t GetHop() const
Get hop. 
  AttributeValue implementation for Boolean. 
bool EnableRouteAggregation
This is a flag to enable route aggregation. 
bool IsBroadcast(void) const
void MergeTriggerPeriodicUpdates()
Merge periodic updates. 
Time m_periodicUpdateInterval
PeriodicUpdateInterval specifies the periodic time interval between which the a node broadcasts its e...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
bool EnableBuffering
Flag that is used to enable or disable buffering. 
bool AnyRunningEvent(Ipv4Address address)
Force delete an update waiting for settling time to complete as a better update to same destination w...
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload). 
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
virtual bool SetAllowBroadcast(bool allowBroadcast)=0
Configure whether broadcast datagram transmissions are allowed. 
ErrorCallback m_ecb
Error callback for own packets. 
a class to represent an Ipv4 address mask 
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
virtual void SetIpv4(Ptr< Ipv4 > ipv4)
static TypeId GetTypeId()
Get the type ID. 
Ptr< const Packet > GetPacket() const
Get packet. 
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit. 
EventId GetEventId(Ipv4Address address)
Get the EcentId associated with that address. 
bool EnableWST
Flag that is used to enable or disable Weighted Settling Time. 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
uint32_t GetSeqNo() const
Get sequence number. 
Time GetDelayLeft(void) const
void SetFlag(RouteFlags flag)
Set route flags. 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit. 
void SetMaxPacketsPerDst(uint32_t len)
Set maximum packets per destination. 
virtual void DoDispose()
Destructor implementation. 
virtual void NotifyInterfaceDown(uint32_t interface)
void GetListOfAllRoutes(std::map< Ipv4Address, RoutingTableEntry > &allRoutes)
Lookup list of all addresses in the routing table. 
double m_weightedFactor
This is the wighted factor to determine the weighted settling time. 
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time. 
virtual void DoDispose(void)
Destructor implementation. 
TAG_BUFFER_INLINE uint32_t ReadU32(void)
TimeWithUnit As(const enum Unit unit) const
Attach a unit to a Time, to facilitate output in a specific unit. 
void Print(std::ostream &os) const
SocketErrno
Enumeration of the possible errors returned by a socket. 
void SendPacketFromQueue(Ipv4Address dst, Ptr< Ipv4Route > route)
Send packet from queue. 
int32_t oif
Positive if output device is fixed in RouteOutput. 
bool Update(RoutingTableEntry &rt)
Updating the routing Table with routing table entry rt. 
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const
Print the Routing Table entries. 
bool GetEntriesChanged() const
Get entries changed. 
a polymophic address class 
void SendPeriodicUpdate()
Broadcasts the entire routing table for every PeriodicUpdateInterval. 
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range. 
void SetSource(Ipv4Address src)
Ptr< Socket > FindSocketWithInterfaceAddress(Ipv4InterfaceAddress iface) const
Find socket with local interface address iface. 
bool ForceDeleteIpv4Event(Ipv4Address address)
Force delete an update waiting for settling time to complete as a better update to same destination w...
bool IsMulticast(void) const
virtual uint32_t GetInteger(void)=0
Get the next random value as an integer drawn from the distribution. 
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay. 
  AttributeValue implementation for Time. 
void Schedule(void)
Schedule a new event using the currently-configured delay, function, and arguments. 
void SetGateway(Ipv4Address gw)
Hold an unsigned integer type. 
TAG_BUFFER_INLINE void WriteU32(uint32_t v)
void SetSeqNo(uint32_t sequenceNumber)
Set sequence number. 
bool GetEnableRAFlag() const
Get enable route aggregation (RA) flag. 
Unit
The unit to use to interpret a number representing time. 
void Purge(std::map< Ipv4Address, RoutingTableEntry > &removedAddresses)
Delete all outdated entries if Lifetime is expired. 
uint32_t m_maxQueueLen
The maximum number of packets that we allow a routing protocol to buffer. 
uint32_t GetSerializedSize() const
void Deserialize(TagBuffer i)
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void Serialize(TagBuffer i) const
bool RouteInput(Ptr< const Packet > p, const Ipv4Header &header, Ptr< const NetDevice > idev, UnicastForwardCallback ucb, MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb)
Route input packet. 
Ipv4Address GetDestination(void) const
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...
Ipv4Address GetBroadcast(void) const
Get the broadcast address. 
Ipv4Mask GetMask(void) const
Get the network mask. 
virtual void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address)
static TypeId GetTypeId(void)
Get the type ID. 
void SetMaxQueueLen(uint32_t len)
Set maximum queue length. 
UnicastForwardCallback m_scb
Unicast callback for own packets. 
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object. 
double f(double x, void *params)
tag a set of bytes in a packet 
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. 
virtual ~RoutingProtocol()
Implement the IPv4 layer. 
Time GetSettlingTime(Ipv4Address dst)
Get settlingTime for a destination. 
Ptr< NetDevice > GetOutputDevice(void) const
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket. 
void DeferredRouteOutput(Ptr< const Packet > p, const Ipv4Header &header, UnicastForwardCallback ucb, ErrorCallback ecb)
Queue packet until we find a route. 
void LookForQueuedPackets(void)
Look for any queued packets to send them out. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
Time m_routeAggregationTime
Parameter that holds the route aggregation time interval. 
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address. 
Ptr< Ipv4Route > GetRoute() const
Get route. 
bool Dequeue(Ipv4Address dst, QueueEntry &entry)
Return first found (the earliest) entry for given destination. 
Time GetSettlingTime() const
Get settling time. 
Ptr< const AttributeChecker > MakeBooleanChecker(void)
  
PacketQueue m_queue
A "drop front on full" queue used by the routing layer to buffer packets to which it does not have a ...
void DeleteAllRoutesFromInterface(Ipv4InterfaceAddress iface)
Delete all route from interface with address iface. 
Time m_maxQueueTime
The maximum period of time that a routing protocol is allowed to buffer a packet for. 
Ptr< Packet > Copy(void) const
performs a COW copy of the packet. 
UnicastForwardCallback GetUnicastForwardCallback() const
Get unicast forward callback function. 
bool AddRoute(RoutingTableEntry &r)
Add routing table entry if it doesn't yet exist in routing table. 
void RecvDsdv(Ptr< Socket > socket)
Receive and process dsdv control packet. 
void SetQueueTimeout(Time t)
Set queue timeout. 
Time GetLifeTime() const
Get lifetime. 
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now. 
Ipv4Address m_mainAddress
Nodes IP address. 
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static Time Now(void)
Return the current simulation virtual time. 
void SetOutputDevice(Ptr< NetDevice > outputDevice)
Equivalent in Linux to dst_entry.dev. 
static Ipv4Address GetLoopback(void)
bool GetWSTFlag() const
Get weighted settling time (WST) flag. 
void SendTriggeredUpdate()
Sends trigger update from a node. 
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
uint32_t m_maxQueuedPacketsPerDst
The maximum number of packets that we allow per destination to buffer. 
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device. 
virtual void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address)
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void GetListOfDestinationWithNextHop(Ipv4Address nxtHp, std::map< Ipv4Address, RoutingTableEntry > &dstList)
Lookup list of addresses for which nxtHp is the next Hop address. 
Ipv4Header GetIpv4Header() const
Get IP header. 
bool DeleteIpv4Event(Ipv4Address address)
Clear up the entry from the map after the event is completed. 
uint32_t GetUid(void) const
void Send(Ptr< Ipv4Route >, Ptr< const Packet >, const Ipv4Header &)
Send packet. 
Ipv4 addresses are stored in host order in this class. 
bool DeleteRoute(Ipv4Address dst)
Delete routing table entry with destination address dst, if it exists. 
a class to store IPv4 address information on an interface 
void SetEnableRAFlag(bool f)
Set enable route aggregation (RA) flag. 
An identifier for simulation events. 
void AddPacketTag(const Tag &tag) const
Add a packet tag. 
Ptr< NetDevice > m_lo
Loopback device used to defer route requests until a route is found. 
Ptr< UniformRandomVariable > m_uniformRandomVariable
Provides uniform random variables. 
bool RemovePacketTag(Tag &tag)
Remove a packet tag. 
bool GetEnableBufferFlag() const
Get enable buffer flag. 
#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. 
void Print(Ptr< OutputStreamWrapper > stream) const
Print routing table. 
Tag used by DSDV implementation. 
Ipv4Address GetDestination() const
Get destination IP address. 
Ipv4Address GetLocal(void) const
Get the local address. 
void SetEnableBufferFlag(bool f)
Set enable buffer flag. 
Abstract base class for IPv4 routing protocols. 
void Clear()
Delete all entries from routing table. 
DeferredRouteOutputTag(int32_t o=-1)
Constructor. 
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer. 
Ptr< Ipv4 > m_ipv4
IP protocol. 
void Setholddowntime(Time t)
Set hold down time (time until an invalid route may be deleted) 
RoutingTable m_advRoutingTable
Advertised Routing table for the node. 
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit. 
Time Now(void)
create an ns3::Time instance which contains the current simulation time. 
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR. 
virtual void NotifyInterfaceUp(uint32_t interface)
static const uint32_t packetSize
bool AddIpv4Event(Ipv4Address address, EventId id)
Add an event for a destination address so that the update to for that destination is sent after the e...
bool LookupRoute(Ipv4Address dst, RoutingTableEntry &rt)
Lookup routing table entry with destination address dst. 
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. 
Timer m_periodicUpdateTimer
Timer to trigger periodic updates from a node. 
uint32_t GetSize()
Get the number of entries. 
bool PeekPacketTag(Tag &tag) const
Search a matching tag and call Tag::Deserialize if it is found. 
void SetWSTFlag(bool f)
Set weighted settling time (WST) flag. 
virtual int Send(Ptr< Packet > p, uint32_t flags)=0
Send data (or dummy data) to the remote host. 
Ipv4Address GetSource(void) const
virtual int Close(void)=0
Close a socket. 
RoutingTable m_routingTable
Main Routing table for the node. 
bool IsNull(void) const
Check for null implementation. 
void Drop(Ptr< const Packet >, const Ipv4Header &, Socket::SocketErrno)
Notify that packet is dropped for some reason. 
This class can be used to hold variables of floating point type such as 'double' or 'float'...
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful. 
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. 
Ipv4Address GetNextHop() const
Get next hop. 
Time m_settlingTime
SettlingTime specifies the time for which a node waits before propagating an update. 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
static Time GetMaximumSimulationTime(void)
Get the maximum representable simulation time. 
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper. 
virtual Address GetAddress(void) const =0
void AddHeader(const Header &header)
Add header to this packet. 
bool Find(Ipv4Address dst)
Finds whether a packet with destination dst exists in the queue. 
void SetDestination(Ipv4Address dest)
Ipv4Address GetIpv4(void) const
Callback< void, Ptr< Ipv4Route >, Ptr< const Packet >, const Ipv4Header & > UnicastForwardCallback
Callback for unicast packets to be forwarded. 
uint32_t Holdtimes
Holdtimes is the multiplicative factor of PeriodicUpdateInterval for which the node waits since the l...
bool Enqueue(QueueEntry &entry)
Push entry in queue, if there is no entry with the same packet and destination address in queue...