28 #define NS_LOG_APPEND_CONTEXT                                   \    29   if (m_ipv4) { std::clog << "[node " << m_ipv4->GetObject<Node> ()->GetId () << "] "; }    33 #include "ns3/boolean.h"    34 #include "ns3/random-variable-stream.h"    35 #include "ns3/inet-socket-address.h"    36 #include "ns3/trace-source-accessor.h"    37 #include "ns3/udp-socket-factory.h"    38 #include "ns3/udp-l4-protocol.h"    39 #include "ns3/udp-header.h"    40 #include "ns3/wifi-net-device.h"    41 #include "ns3/adhoc-wifi-mac.h"    42 #include "ns3/string.h"    43 #include "ns3/pointer.h"    80     static TypeId tid = 
TypeId (
"ns3::aodv::DeferredRouteOutputTag")
    82       .SetGroupName (
"Aodv")
   113     return sizeof(int32_t);
   128     os << 
"DeferredRouteOutputTag: output interface = " << 
m_oif;
   146     m_rreqRateLimit (10),
   147     m_rerrRateLimit (10),
   148     m_activeRouteTimeout (
Seconds (3)),
   151     m_netTraversalTime (
Time ((2 * m_netDiameter) * m_nodeTraversalTime)),
   152     m_pathDiscoveryTime ( 
Time (2 * m_netTraversalTime)),
   153     m_myRouteTimeout (
Time (2 * 
std::
max (m_pathDiscoveryTime, m_activeRouteTimeout))),
   155     m_allowedHelloLoss (2),
   156     m_deletePeriod (
Time (5 * 
std::
max (m_activeRouteTimeout, m_helloInterval))),
   157     m_nextHopWait (m_nodeTraversalTime + 
MilliSeconds (10)),
   158     m_blackListTimeout (
Time (m_rreqRetries * m_netTraversalTime)),
   161     m_destinationOnly (false),
   162     m_gratuitousReply (true),
   163     m_enableHello (false),
   164     m_routingTable (m_deletePeriod),
   165     m_queue (m_maxQueueLen, m_maxQueueTime),
   168     m_rreqIdCache (m_pathDiscoveryTime),
   169     m_dpd (m_pathDiscoveryTime),
   170     m_nb (m_helloInterval),
   173     m_htimer (
Timer::CANCEL_ON_DESTROY),
   174     m_rreqRateLimitTimer (
Timer::CANCEL_ON_DESTROY),
   175     m_rerrRateLimitTimer (
Timer::CANCEL_ON_DESTROY),
   184   static TypeId tid = 
TypeId (
"ns3::aodv::RoutingProtocol")
   186     .SetGroupName (
"Aodv")
   188     .AddAttribute (
"HelloInterval", 
"HELLO messages emission interval.",
   192     .AddAttribute (
"TtlStart", 
"Initial TTL value for RREQ.",
   195                    MakeUintegerChecker<uint16_t> ())
   196     .AddAttribute (
"TtlIncrement", 
"TTL increment for each attempt using the expanding ring search for RREQ dissemination.",
   199                    MakeUintegerChecker<uint16_t> ())
   200     .AddAttribute (
"TtlThreshold", 
"Maximum TTL value for expanding ring search, TTL = NetDiameter is used beyond this value.",
   203                    MakeUintegerChecker<uint16_t> ())
   204     .AddAttribute (
"TimeoutBuffer", 
"Provide a buffer for the timeout.",
   207                    MakeUintegerChecker<uint16_t> ())
   208     .AddAttribute (
"RreqRetries", 
"Maximum number of retransmissions of RREQ to discover a route",
   211                    MakeUintegerChecker<uint32_t> ())
   212     .AddAttribute (
"RreqRateLimit", 
"Maximum number of RREQ per second.",
   215                    MakeUintegerChecker<uint32_t> ())
   216     .AddAttribute (
"RerrRateLimit", 
"Maximum number of RERR per second.",
   219                    MakeUintegerChecker<uint32_t> ())
   220     .AddAttribute (
"NodeTraversalTime", 
"Conservative estimate of the average one hop traversal time for packets and should include "   221                    "queuing delays, interrupt processing times and transfer times.",
   225     .AddAttribute (
"NextHopWait", 
"Period of our waiting for the neighbour's RREP_ACK = 10 ms + NodeTraversalTime",
   229     .AddAttribute (
"ActiveRouteTimeout", 
"Period of time during which the route is considered to be valid",
   233     .AddAttribute (
"MyRouteTimeout", 
"Value of lifetime field in RREP generating by this node = 2 * max(ActiveRouteTimeout, PathDiscoveryTime)",
   237     .AddAttribute (
"BlackListTimeout", 
"Time for which the node is put into the blacklist = RreqRetries * NetTraversalTime",
   241     .AddAttribute (
"DeletePeriod", 
"DeletePeriod is intended to provide an upper bound on the time for which an upstream node A "   242                    "can have a neighbor B as an active next hop for destination D, while B has invalidated the route to D."   243                    " = 5 * max (HelloInterval, ActiveRouteTimeout)",
   247     .AddAttribute (
"NetDiameter", 
"Net diameter measures the maximum possible number of hops between two nodes in the network",
   250                    MakeUintegerChecker<uint32_t> ())
   251     .AddAttribute (
"NetTraversalTime", 
"Estimate of the average net traversal time = 2 * NodeTraversalTime * NetDiameter",
   255     .AddAttribute (
"PathDiscoveryTime", 
"Estimate of maximum time needed to find route in network = 2 * NetTraversalTime",
   259     .AddAttribute (
"MaxQueueLen", 
"Maximum number of packets that we allow a routing protocol to buffer.",
   263                    MakeUintegerChecker<uint32_t> ())
   264     .AddAttribute (
"MaxQueueTime", 
"Maximum time packets can be queued (in seconds)",
   269     .AddAttribute (
"AllowedHelloLoss", 
"Number of hello messages which may be loss for valid link.",
   272                    MakeUintegerChecker<uint16_t> ())
   273     .AddAttribute (
"GratuitousReply", 
"Indicates whether a gratuitous RREP should be unicast to the node originated route discovery.",
   278     .AddAttribute (
"DestinationOnly", 
"Indicates only the destination may respond to this RREQ.",
   283     .AddAttribute (
"EnableHello", 
"Indicates whether a hello messages enable.",
   288     .AddAttribute (
"EnableBroadcast", 
"Indicates whether a broadcast data packets forwarding enable.",
   293     .AddAttribute (
"UniformRv",
   294                    "Access to the underlying UniformRandomVariable",
   297                    MakePointerChecker<UniformRandomVariable> ())
   326       iter->first->Close ();
   332       iter->first->Close ();
   342                         << 
"; Time: " << 
Now ().
As (unit)
   343                         << 
", Local time: " << GetObject<Node> ()->GetLocalTime ().As (unit)
   344                         << 
", AODV Routing table" << std::endl;
   416   uint32_t iif = (oif ? 
m_ipv4->GetInterfaceForDevice (oif) : -1);
   440       if (!result || ((rt.GetFlag () != 
IN_SEARCH) && result))
   463   int32_t iif = 
m_ipv4->GetInterfaceForDevice (idev);
   502                   NS_LOG_DEBUG (
"Duplicated packet " << p->
GetUid () << 
" from " << origin << 
". Drop.");
   507               if (lcb.
IsNull () == 
false)
   510                   lcb (p, header, iif);
   515                   NS_LOG_ERROR (
"Unable to deliver packet locally due to null callback " << p->
GetUid () << 
" from " << origin);
   539                       ucb (route, packet, header);
   556   if (
m_ipv4->IsDestinationAddress (dst, iif))
   565       if (lcb.
IsNull () == 
false)
   568           lcb (p, header, iif);
   572           NS_LOG_ERROR (
"Unable to deliver packet locally due to null callback " << p->
GetUid () << 
" from " << origin);
   579   if (
m_ipv4->IsForwarding (iif) == 
false)
   581       NS_LOG_LOGIC (
"Forwarding disabled for this interface");
   627           ucb (route, p, header);
   640   NS_LOG_LOGIC (
"route not found to " << dst << 
". Send RERR message.");
   673   if (l3->GetNAddresses (i) > 1)
   675       NS_LOG_WARN (
"AODV does not work with more then one address per each interface.");
   711   if (l3->GetInterface (i)->GetArpCache ())
   745           mac->TraceDisconnectWithoutContext (
"TxErrHeader",
   783   if (l3->GetNAddresses (i) == 1)
   825       NS_LOG_LOGIC (
"AODV does not work with more then one address per each interface. Ignore added address");
   843           unicastSocket->
Close ();
   848       if (l3->GetNAddresses (i))
   891       NS_LOG_LOGIC (
"Remove address not participating in AODV operation");
   941           int32_t 
interface = 
m_ipv4->GetInterfaceForAddress (addr);
   942           if (oif == 
m_ipv4->GetNetDevice (static_cast<uint32_t> (interface)))
  1104       uint16_t backoffFactor = rt.
GetRreqCnt () - 1;
  1105       NS_LOG_LOGIC (
"Applying binary exponential backoff factor " << backoffFactor);
  1132       NS_ASSERT_MSG (
false, 
"Received a packet from an unknown socket");
  1134   NS_LOG_DEBUG (
"AODV node " << 
this << 
" received a AODV packet from " << sender << 
" to " << receiver);
  1141       NS_LOG_DEBUG (
"AODV message " << packet->
GetUid () << 
" with unknown type received: " << tHeader.
Get () << 
". Drop");
  1144   switch (tHeader.
Get ())
  1191   NS_LOG_FUNCTION (
this << 
"sender " << sender << 
" receiver " << receiver);
  1197                                                m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0),
  1211                                                    m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0),
  1237   uint32_t 
id = rreqHeader.
GetId ();
  1269                                                m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0),  hop,
  1301       NS_LOG_DEBUG (
"Neighbor:" << src << 
" not found in routing table. Creating an entry");
  1304                                   m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0),
  1322   NS_LOG_LOGIC (receiver << 
" receive RREQ with hop count " << static_cast<uint32_t> (rreqHeader.
GetHopCount ())
  1323                          << 
" ID " << rreqHeader.
GetId ()
  1324                          << 
" to destination " << rreqHeader.
GetDst ());
  1331       NS_LOG_DEBUG (
"Send reply since I am the destination");
  1375       NS_LOG_DEBUG (
"TTL exceeded. Drop RREQ origin " << src << 
" destination " << dst );
  1424   packet->AddPacketTag (tag);
  1425   packet->AddHeader (rrepHeader);
  1427   packet->AddHeader (tHeader);
  1442   if (toDst.
GetHop () == 1)
  1476       packetToDst->AddPacketTag (gratTag);
  1477       packetToDst->AddHeader (gratRepHeader);
  1479       packetToDst->AddHeader (type);
  1537                                            m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0), hop,
  1546       if (!toDst.GetValidSeqNo ())
  1551       else if ((int32_t (rrepHeader.
GetDstSeqno ()) - int32_t (toDst.GetSeqNo ())) > 0)
  1558           if ((rrepHeader.
GetDstSeqno () == toDst.GetSeqNo ()) && (toDst.GetFlag () != 
VALID))
  1563           else if ((rrepHeader.
GetDstSeqno () == toDst.GetSeqNo ()) && (hop < toDst.GetHop ()))
  1606       toDst.InsertPrecursor (toOrigin.
GetNextHop ());
  1626       NS_LOG_DEBUG (
"TTL exceeded. Drop RREP destination " << dst << 
" origin " << rrepHeader.
GetOrigin ());
  1669                                                m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0),
  1677       toNeighbor.SetValidSeqNo (
true);
  1678       toNeighbor.SetFlag (
VALID);
  1679       toNeighbor.SetOutputDevice (
m_ipv4->GetNetDevice (
m_ipv4->GetInterfaceForAddress (receiver)));
  1680       toNeighbor.SetInterface (
m_ipv4->GetAddress (
m_ipv4->GetInterfaceForAddress (receiver), 0));
  1681       toNeighbor.SetHop (1);
  1682       toNeighbor.SetNextHop (rrepHeader.
GetDst ());
  1697   std::map<Ipv4Address, uint32_t> dstWithNextHopSrc;
  1698   std::map<Ipv4Address, uint32_t> unreachable;
  1700   std::pair<Ipv4Address, uint32_t> un;
  1703       for (std::map<Ipv4Address, uint32_t>::const_iterator i =
  1704              dstWithNextHopSrc.begin (); i != dstWithNextHopSrc.end (); ++i)
  1706           if (i->first == un.first)
  1708               unreachable.insert (un);
  1713   std::vector<Ipv4Address> precursors;
  1714   for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin ();
  1715        i != unreachable.end (); )
  1727           rerrHeader.
Clear ();
  1772       NS_LOG_DEBUG (
"Route not found. Drop all packets with dst " << dst);
  1784       NS_LOG_DEBUG (
"Route down. Stop search. Drop packet with destination " << dst);
  1853       packet->AddPacketTag (tag);
  1854       packet->AddHeader (helloHeader);
  1856       packet->AddHeader (tHeader);
  1885           NS_LOG_DEBUG (
"Output device doesn't match. Dropped.");
  1892       ucb (route, p, header);
  1901   std::vector<Ipv4Address> precursors;
  1902   std::map<Ipv4Address, uint32_t> unreachable;
  1912   for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); i
  1913        != unreachable.end (); )
  1926           rerrHeader.
Clear ();
  1947   unreachable.insert (std::make_pair (nextHop, toNextHop.
GetSeqNo ()));
  1964                                                 << 
"; suppressing RERR");
  1981       NS_LOG_LOGIC (
"Unicast RERR to the source of the data transmission");
  2013   if (precursors.empty ())
  2026                                                 << 
"; suppressing RERR");
  2030   if (precursors.size () == 1)
  2045   std::vector<Ipv4InterfaceAddress> ifaces;
  2047   for (std::vector<Ipv4Address>::const_iterator i = precursors.begin (); i != precursors.end (); ++i)
  2050           && std::find (ifaces.begin (), ifaces.end (), toPrecursor.
GetInterface ()) == ifaces.end ())
  2056   for (std::vector<Ipv4InterfaceAddress>::const_iterator i = ifaces.begin (); i != ifaces.end (); ++i)
  2060       NS_LOG_LOGIC (
"Broadcast RERR message from interface " << i->GetLocal ());
 Time m_activeRouteTimeout
Period of time during which the route is considered to be valid. 
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer. 
static TypeId GetTypeId(void)
Get the type ID. 
UnicastForwardCallback GetUnicastForwardCallback() const
Get unicast forward callback. 
void SendReplyAck(Ipv4Address neighbor)
Send RREP_ACK. 
Time m_netTraversalTime
Estimate of the average net traversal time. 
static Ipv4Mask GetOnes(void)
void InvalidateRoutesWithDst(std::map< Ipv4Address, uint32_t > const &unreachable)
Update routing entries with this destination as follows: 
virtual void DoInitialize(void)
Initialize() implementation. 
uint64_t GetUid(void) const
Returns the packet's Uid. 
Simulation virtual time values and global simulation resolution. 
bool MarkLinkAsUnidirectional(Ipv4Address neighbor, Time blacklistTimeout)
Mark entry as unidirectional (e.g. 
bool GetGratuitousReplyFlag() const
Get gratuitous reply flag. 
void SetOutputDevice(Ptr< NetDevice > dev)
Set output device. 
#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. 
uint16_t m_rreqCount
Number of RREQs used for RREQ rate control. 
  AttributeValue implementation for Boolean. 
bool m_enableBroadcast
Indicates whether a a broadcast data packets forwarding enable. 
bool LookupRoute(Ipv4Address dst, RoutingTableEntry &rt)
Lookup routing table entry with destination address dst. 
int32_t GetInterface() const
Get the output interface. 
void Clear()
Delete all entries from routing table. 
void SendTo(Ptr< Socket > socket, Ptr< Packet > packet, Ipv4Address destination)
Send packet to destination scoket. 
bool IsBroadcast(void) const
RoutingTable m_routingTable
Routing table. 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
uint32_t GetMaxQueueLen() const
Get the maximum queue length. 
void Print(Ptr< OutputStreamWrapper > stream) const
Print routing table. 
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
bool IsUnidirectional() const
Get the unidirectional flag. 
Hold variables of type string. 
virtual bool SetAllowBroadcast(bool allowBroadcast)=0
Configure whether broadcast datagram transmissions are allowed. 
Time m_nodeTraversalTime
NodeTraversalTime is a conservative estimate of the average one hop traversal time for packets and sh...
a class to represent an Ipv4 address mask 
Time m_deletePeriod
DeletePeriod is intended to provide an upper bound on the time for which an upstream node A can have ...
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Tag used by AODV implementation. 
Ptr< Ipv4 > m_ipv4
IP protocol. 
bool Update(RoutingTableEntry &rt)
Update routing table. 
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit. 
Timer m_ackTimer
RREP_ACK timer. 
Ipv4Address GetDestination() const
Get destination address function. 
uint32_t m_maxQueueLen
The maximum number of packets that we allow a routing protocol to buffer. 
void IncrementRreqCnt()
Increment the RREQ count. 
bool Forwarding(Ptr< const Packet > p, const Ipv4Header &header, UnicastForwardCallback ucb, ErrorCallback ecb)
If route exists and is valid, forward packet. 
bool GetBroadcastEnable() const
Get broadcast enable flag. 
Time m_helloInterval
Every HelloInterval the node checks whether it has sent a broadcast within the last HelloInterval...
void SetMaxQueueLen(uint32_t len)
Set maximum queue length. 
Ipv4InterfaceAddress GetInterface() const
Get the Ipv4InterfaceAddress. 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Time m_maxQueueTime
The maximum period of time that a routing protocol is allowed to buffer a packet for. 
Time GetDelayLeft(void) const
void SendHello()
Send hello. 
#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. 
virtual void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address)
virtual void DoDispose()
Destructor implementation. 
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
void SetMaxQueueLen(uint32_t len)
Set the maximum queue length. 
Timer m_rreqRateLimitTimer
RREQ rate limit timer. 
uint16_t m_rreqRateLimit
Maximum number of RREQ per second. 
uint16_t m_ttlThreshold
Maximum TTL value for expanding ring search, TTL = NetDiameter is used beyond this value...
Neighbors m_nb
Handle neighbors. 
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time. 
virtual void DoDispose(void)
Destructor implementation. 
bool GetDestinationOnlyFlag() const
Get destination only flag. 
void SetGratuitousReplyFlag(bool f)
Set gratuitous reply flag. 
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. 
Ptr< Socket > FindSubnetBroadcastSocketWithInterfaceAddress(Ipv4InterfaceAddress iface) const
Find subnet directed broadcast socket with local interface address iface. 
Time m_nextHopWait
Period of our waiting for the neighbour's RREP_ACK. 
void SetLifeTime(Time lt)
Set the lifetime. 
This class implements a tag that carries the socket-specific TTL of a packet to the IP layer...
uint16_t m_rerrRateLimit
Maximum number of REER per second. 
SocketErrno
Enumeration of the possible errors returned by a socket. 
Time m_lastBcastTime
Keep track of the last bcast time. 
void GetPrecursors(std::vector< Ipv4Address > &prec) const
Inserts precursors in output parameter prec if they do not yet exist in vector. 
bool m_destinationOnly
Indicates only the destination may respond to this RREQ. 
uint32_t m_rreqRetries
Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route. 
Ptr< Ipv4Route > GetRoute() const
Get route function. 
RequestQueue m_queue
A "drop-front" queue used by the routing layer to buffer packets to which it does not have a route...
bool Enqueue(QueueEntry &entry)
Push entry in queue, if there is no entry with the same packet and destination address in queue...
uint32_t m_seqNo
Request sequence number. 
void SetInterface(int32_t oif)
Set the output interface. 
void ScheduleRreqRetry(Ipv4Address dst)
Repeated attempts by a source node at route discovery for a single destination use the expanding ring...
a polymophic address class 
bool m_gratuitousReply
Indicates whether a gratuitous RREP should be unicast to the node originated route discovery...
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 GetSeqNo() const
Get the sequence number. 
void RecvAodv(Ptr< Socket > socket)
Receive and process control packet. 
virtual void SetIpv4(Ptr< Ipv4 > ipv4)
void DelArpCache(Ptr< ArpCache > a)
Don't use given ARP cache any more (interface is down) 
bool InsertPrecursor(Ipv4Address id)
Insert precursor in precursor list if it doesn't yet exist in the list. 
bool IsMulticast(void) const
void SetRreqCnt(uint8_t n)
Set the RREQ count. 
void RecvReplyAck(Ipv4Address neighbor)
Receive RREP_ACK. 
bool IsDuplicate(Ptr< const Packet > p, const Ipv4Header &header)
Check if the packet is a duplicate. 
void SendPacketFromQueue(Ipv4Address dst, Ptr< Ipv4Route > route)
Forward packet from route request queue. 
void DeferredRouteOutput(Ptr< const Packet > p, const Ipv4Header &header, UnicastForwardCallback ucb, ErrorCallback ecb)
Queue packet and send route request. 
bool IsMyOwnAddress(Ipv4Address src)
Test whether the provided address is assigned to an interface on this node. 
virtual uint32_t GetInteger(void)=0
Get the next random value as an integer drawn from the distribution. 
uint16_t m_ttlIncrement
TTL increment for each attempt using the expanding ring search for RREQ dissemination. 
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
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) 
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay. 
void RecvReply(Ptr< Packet > p, Ipv4Address my, Ipv4Address src)
Receive RREP. 
void DeleteAllRoutesFromInterface(Ipv4InterfaceAddress iface)
Delete all route from interface with address iface. 
void HelloTimerExpire()
Schedule next send of hello message. 
uint32_t m_allowedHelloLoss
Number of hello messages which may be loss for valid link. 
void SetTtl(uint8_t ttl)
Set the tag's TTL. 
  AttributeValue implementation for Time. 
void Schedule(void)
Schedule a new event using the currently-configured delay, function, and arguments. 
bool GetValidSeqNo() const
Get the valid sequence number. 
void SetGateway(Ipv4Address gw)
bool UpdateRouteLifeTime(Ipv4Address addr, Time lt)
Set lifetime field in routing table entry to the maximum of existing lifetime and lt...
Hold an unsigned integer type. 
void UpdateRouteToNeighbor(Ipv4Address sender, Ipv4Address receiver)
Update neighbor record. 
TAG_BUFFER_INLINE void WriteU32(uint32_t v)
Callback< void, WifiMacHeader const & > GetTxErrorCallback() const
Get callback to ProcessTxError. 
Unit
The unit to use to interpret a number representing time. 
Ipv4Address GetNextHop() const
Get next hop address. 
void SetSeqNo(uint32_t sn)
Set the sequence number. 
void SetValidSeqNo(bool s)
Set the valid sequence number. 
int32_t m_oif
Positive if output device is fixed in RouteOutput. 
virtual void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address)
Hold together all Wifi-related objects. 
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer. 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Ipv4Address GetDestination(void) const
static TypeId GetTypeId(void)
Get the type ID. 
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read. 
virtual void DoInitialize(void)
Initialize() implementation. 
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 SendReplyByIntermediateNode(RoutingTableEntry &toDst, RoutingTableEntry &toOrigin, bool gratRep)
Send RREP by intermediate node. 
Ipv4Address GetBroadcast(void) const
Get the broadcast address. 
Ptr< Socket > FindSocketWithInterfaceAddress(Ipv4InterfaceAddress iface) const
Find unicast socket with local interface address iface. 
Ipv4Mask GetMask(void) const
Get the network mask. 
void SetDelay(const Time &delay)
void DropPacketWithDst(Ipv4Address dst)
Remove all packets with destination IP address dst. 
uint16_t m_rerrCount
Number of RERRs used for RERR rate control. 
static Ipv4Address GetBroadcast(void)
void SetMaxQueueTime(Time t)
Set the maximum queue time. 
void GetListOfDestinationWithNextHop(Ipv4Address nextHop, std::map< Ipv4Address, uint32_t > &unreachable)
Lookup routing entries with next hop Address dst and not empty list of precursors. 
bool GetHelloEnable() const
Get hello enable flag. 
void SetInterface(Ipv4InterfaceAddress iface)
Set the Ipv4InterfaceAddress. 
void SendRerrWhenNoRouteToForward(Ipv4Address dst, uint32_t dstSeqNo, Ipv4Address origin)
Send RERR message when no route to forward input packet. 
This policy cancels the event from the destructor of the Timer to verify that the event has already e...
tag a set of bytes in a packet 
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object. 
void Clear()
Remove all entries. 
void SendRerrWhenBreaksLinkToNextHop(Ipv4Address nextHop)
Initiate RERR. 
Implement the IPv4 layer. 
Ptr< NetDevice > GetOutputDevice(void) const
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. 
std::map< Ptr< Socket >, Ipv4InterfaceAddress > m_socketSubnetBroadcastAddresses
Raw subnet directed broadcast socket per each IP interface, map socket -> iface address (IP + mask) ...
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address. 
void SetFlag(RouteFlags flag)
Set the route flags. 
Ptr< const AttributeChecker > MakeBooleanChecker(void)
  
Ptr< Packet > Copy(void) const
performs a COW copy of the packet. 
void RecvRequest(Ptr< Packet > p, Ipv4Address receiver, Ipv4Address src)
Receive RREQ. 
uint32_t m_netDiameter
Net diameter measures the maximum possible number of hops between two nodes in the network...
std::map< Ptr< Socket >, Ipv4InterfaceAddress > m_socketAddresses
Raw unicast socket per each IP interface, map socket -> iface address (IP + mask) ...
uint16_t m_ttlStart
Initial TTL value for RREQ. 
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now. 
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void Update(Ipv4Address addr, Time expire)
Update expire time for entry with address addr, if it exists, else add new entry. ...
static Time Now(void)
Return the current simulation virtual time. 
void SetOutputDevice(Ptr< NetDevice > outputDevice)
Equivalent in Linux to dst_entry.dev. 
Ptr< NetDevice > GetOutputDevice() const
Get output device. 
void ProcessHello(RrepHeader const &rrepHeader, Ipv4Address receiverIfaceAddr)
Process hello message. 
static Ipv4Address GetLoopback(void)
virtual void NotifyInterfaceUp(uint32_t interface)
bool m_enableHello
Indicates whether a hello messages enable. 
uint8_t GetRreqCnt() const
Get the RREQ count. 
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
DuplicatePacketDetection m_dpd
Handle duplicated broadcast/multicast packets. 
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device. 
Ipv4Address GetGateway(void) const
void RecvError(Ptr< Packet > p, Ipv4Address src)
Receive RERR from node with address src. 
void RreqRateLimitTimerExpire()
Reset RREQ count and schedule RREQ rate limit timer with delay 1 sec. 
void SetDestinationOnlyFlag(bool f)
Set destination only flag. 
Time GetMaxQueueTime() const
Get maximum queue time. 
bool IsRunning(void) const
Time m_myRouteTimeout
Value of lifetime field in RREP generating by this node. 
double max(double x, double y)
void SetHop(uint16_t hop)
Set the number of hops. 
Time m_pathDiscoveryTime
Estimate of maximum time needed to find route in network. 
Ipv4 addresses are stored in host order in this class. 
virtual void NotifyInterfaceDown(uint32_t interface)
virtual ~RoutingProtocol()
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if a condition is false, with a message. 
a class to store IPv4 address information on an interface 
Ipv4Header GetIpv4Header() const
Get IPv4 header. 
void AddPacketTag(const Tag &tag) const
Add a packet tag. 
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN. 
void SetQueueTimeout(Time t)
Set queue timeout. 
RoutingProtocol()
constructor 
bool AddRoute(RoutingTableEntry &r)
Add routing table entry if it doesn't yet exist in routing table. 
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. 
void Cancel(void)
Cancel the currently-running event if there is one. 
Time m_blackListTimeout
Time for which the node is put into the blacklist. 
void SendRerrMessage(Ptr< Packet > packet, std::vector< Ipv4Address > precursors)
Forward RERR. 
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const
Print the Routing Table entries. 
bool IsDuplicate(Ipv4Address addr, uint32_t id)
Check that entry (addr, id) exists in cache. 
uint16_t GetHop() const
Get the number of hops. 
void SetIpRecvTtl(bool ipv4RecvTtl)
Tells a socket to pass information about IP_TTL up the stack. 
void SetCallback(Callback< void, Ipv4Address > cb)
Set link failure callback. 
void SendReply(RreqHeader const &rreqHeader, RoutingTableEntry const &toOrigin)
Send RREP. 
Ipv4Address GetLocal(void) const
Get the local address. 
Abstract base class for IPv4 routing protocols. 
void SetNextHop(Ipv4Address nextHop)
Set next hop address. 
Ptr< Ipv4Route > LoopbackRoute(const Ipv4Header &header, Ptr< NetDevice > oif) const
Create loopback route for given header. 
Timer m_rerrRateLimitTimer
RERR rate limit timer. 
RouteFlags GetFlag() const
Get the route flags. 
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer. 
void AckTimerExpire(Ipv4Address neighbor, Time blacklistTimeout)
Mark link to neighbor node as unidirectional for blacklistTimeout. 
std::map< Ipv4Address, Timer > m_addressReqTimer
Map IP address + RREQ timer. 
void Serialize(TagBuffer i) const
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. 
Ptr< UniformRandomVariable > m_uniformRandomVariable
Provides uniform random variables. 
uint16_t m_timeoutBuffer
Provide a buffer for the timeout. 
void SendRequest(Ipv4Address dst)
Send RREQ. 
bool Dequeue(Ipv4Address dst, QueueEntry &entry)
Return first found (the earliest) entry for given destination. 
void RerrRateLimitTimerExpire()
Reset RERR count and schedule RERR rate limit timer with delay 1 sec. 
Time GetLifeTime() const
Get the lifetime. 
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. 
DeferredRouteOutputTag(int32_t o=-1)
Constructor. 
bool PeekPacketTag(Tag &tag) const
Search a matching tag and call Tag::Deserialize if it is found. 
IdCache m_rreqIdCache
Handle duplicated RREQ. 
void RouteRequestTimerExpire(Ipv4Address dst)
Handle route discovery process. 
void Start()
Start protocol operation. 
void SetHelloEnable(bool f)
Set hello enable. 
void AddArpCache(Ptr< ArpCache > a)
Add ARP cache to be used to allow layer 2 notifications processing. 
Ipv4Address GetSource(void) const
virtual int Close(void)=0
Close a socket. 
bool IsNull(void) const
Check for null implementation. 
bool LookupValidRoute(Ipv4Address dst, RoutingTableEntry &rt)
Lookup route in VALID state. 
void Print(std::ostream &os) const
static TypeId GetTypeId()
Get the type ID. 
void SetBroadcastEnable(bool f)
Set broadcast enable flag. 
bool DeleteRoute(Ipv4Address dst)
Delete routing table entry with destination address dst, if it exists. 
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void Purge()
Delete all outdated entries and invalidate valid entry if Lifetime is expired. 
a unique identifier for an interface. 
Timer m_htimer
Hello timer. 
static const uint8_t PROT_NUMBER
protocol number (0x11) 
Ptr< NetDevice > m_lo
Loopback device used to defer RREQ until packet will be fully formed. 
void Deserialize(TagBuffer i)
uint32_t m_requestId
Broadcast ID. 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
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. 
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. 
Ptr< const Packet > GetPacket() const
Get packet from entry. 
virtual Address GetAddress(void) const =0
void AddHeader(const Header &header)
Add header to this packet. 
uint8_t GetTtl(void) const
Get the tag's TTL. 
void SetDestination(Ipv4Address dest)
void ScheduleTimer()
Schedule m_ntimer. 
Ipv4Address GetIpv4(void) const
static const uint32_t AODV_PORT
UDP Port for AODV control traffic. 
uint32_t GetSerializedSize() const