40 #include <sys/types.h> 
   42 #include "ns3/callback.h" 
   43 #include "ns3/object.h" 
   46 #include "ns3/buffer.h" 
   47 #include "ns3/packet.h" 
   49 #include "ns3/ip-l4-protocol.h" 
   50 #include "ns3/ipv4-l3-protocol.h" 
   51 #include "ns3/icmpv4-l4-protocol.h" 
   52 #include "ns3/ipv4-interface.h" 
   53 #include "ns3/ipv4-header.h" 
   54 #include "ns3/ipv4-address.h" 
   55 #include "ns3/traced-callback.h" 
   56 #include "ns3/random-variable-stream.h" 
   57 #include "ns3/ipv4-route.h" 
   58 #include "ns3/timer.h" 
   59 #include "ns3/net-device.h" 
   60 #include "ns3/output-stream-wrapper.h" 
   61 #include "ns3/wifi-mac.h" 
   62 #include "ns3/socket.h" 
   63 #include "ns3/event-garbage-collector.h" 
  305                           uint16_t fragmentOffset, uint16_t identification, 
bool saveEntry);
 
  421                             std::vector<Ipv4Address> &nodeList,
 
void SendRerrWhenBreaksLinkToNextHop(Ipv4Address nextHop, uint8_t protocol)
Send the route error message when the link breaks to the next hop. 
 
uint32_t m_sendRetries
of retries have been sent for network acknowledgment
 
uint32_t m_stabilityDecrFactor
The initial decrease factor for link cache. 
 
void SetDownTarget(IpL4Protocol::DownTargetCallback callback)
This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 ca...
 
std::string m_cacheType
The type of route cache. 
 
Simulation virtual time values and global simulation resolution. 
 
bool PassiveEntryCheck(Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t segsLeft, uint16_t fragmentOffset, uint16_t identification, bool saveEntry)
Find the same passive entry. 
 
void CancelLinkPacketTimer(MaintainBuffEntry &mb)
Cancel the link packet retransmission timer for a specific maintenance entry. 
 
virtual void DoDispose(void)
Drop trace callback. 
 
uint32_t m_maxSendBuffLen
The maximum number of packets that we allow a routing protocol to buffer. 
 
void ScheduleInterRequest(Ptr< Packet > packet)
Schedule the intermediate route request. 
 
uint32_t m_stabilityIncrFactor
The initial increase factor for link cache. 
 
void SendInitialRequest(Ipv4Address source, Ipv4Address destination, uint8_t protocol)
Broadcast the route request packet in subnet. 
 
bool AddRoute(RouteCacheEntry &rt)
functions used to direct to route cache 
 
void SendBuffTimerExpire()
The send buffer timer expire. 
 
void Scheduler(uint32_t priority)
This function is called to schedule sending packets from the network queue. 
 
void SalvagePacket(Ptr< const Packet > packet, Ipv4Address source, Ipv4Address dst, uint8_t protocol)
Salvage the packet which has been transmitted for 3 times. 
 
Time m_sendBuffInterval
how often to check send buffer 
 
Time m_passiveAckTimeout
The timeout value for passive acknowledge. 
 
std::map< std::string, uint32_t > m_macToNodeIdMap
The map of mac address to node id. 
 
uint32_t m_discoveryHopLimit
Maximum hops to go for route request. 
 
uint32_t GetPriority(DsrMessageType messageType)
Set the priority of the packet in network queue. 
 
Ptr< Ipv4 > m_ip
The ip ptr. 
 
Forward calls to a chain of Callback. 
 
uint32_t m_linkRetries
of retries have been sent for link acknowledgment
 
TracedCallback< const DsrOptionSRHeader & > m_txPacketTrace
 
void NetworkScheduleTimerExpire(MaintainBuffEntry &mb, uint8_t protocol)
This function deals with packet retransmission timer expire using network acknowledgment. 
 
void DeleteAllRoutesIncludeLink(Ipv4Address errorSrc, Ipv4Address unreachNode, Ipv4Address node)
functions used to direct to route cache 
 
Time m_maxRequestPeriod
The max request period. 
 
void PrintVector(std::vector< Ipv4Address > &vec)
Print the route vector. 
 
PacketType
Packet types are used as they are in Linux. 
 
uint32_t m_maxEntriesEachDst
Max number of route entries to save for each destination. 
 
Ptr< dsr::RouteCache > m_routeCache
A "drop-front" queue used by the routing layer to cache routes found. 
 
void IncreaseRetransTimer()
This function is called to increase the retransmission timer for data packet in the network queue...
 
Ipv4Address m_mainAddress
Our own Ip address. 
 
Ipv4Address SearchNextHop(Ipv4Address ipv4Address, std::vector< Ipv4Address > &vec)
Get the next hop of the route. 
 
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time. 
 
bool IsLinkCache()
functions used to direct to route cache 
 
Time m_linkAckTimeout
The timeout value for link acknowledge. 
 
Introspection did not find any typical Config paths. 
 
bool PromiscReceive(Ptr< NetDevice > device, Ptr< const Packet > packet, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType)
Promiscuous receive data packets destined to some other node. 
 
uint32_t m_requestTableSize
The max size of the request table size. 
 
void ScheduleCachedReply(Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, Ptr< Ipv4Route > route, double hops)
Schedule the cached reply to a random start time to avoid possible route reply storm. 
 
uint32_t m_tryLinkAcks
Maximum number of packet transmission using link acknowledgment. 
 
bool AddRoute_Link(RouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source)
functions used to direct to route cache 
 
void ForwardErrPacket(DsrOptionRerrUnreachHeader &rerr, DsrOptionSRHeader &sourceRoute, Ipv4Address nextHop, uint8_t protocol, Ptr< Ipv4Route > route)
This function is responsible for forwarding error packets along the route. 
 
Time m_maxCacheTime
Max time for caching the route cache entry. 
 
Time m_gratReplyHoldoff
The max gratuitous reply hold off time. 
 
a polymophic address class 
 
uint32_t m_maxMaintainLen
Max # of entries for maintainance buffer. 
 
void SendRequest(Ptr< Packet > packet, Ipv4Address source)
Forward the route request if the node is not the destination. 
 
Ipv4Address GetIPfromID(uint16_t id)
Get the ip address from id. 
 
std::vector< Ipv4Address > m_finalRoute
The route cache. 
 
static TypeId GetTypeId()
Get the type identificator. 
 
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
 
uint32_t m_graReplyTableSize
Set the gratuitous reply table size. 
 
void ConnectCallbacks()
Connect the callback for the tracing event. 
 
Time m_maxNetworkDelay
Maximum network delay. 
 
uint16_t m_ackId
The ack id assigned to each acknowledge. 
 
Ptr< dsr::RreqTable > GetRequestTable() const 
Get the request table. 
 
void LinkScheduleTimerExpire(MaintainBuffEntry &mb, uint8_t protocol)
This function deals with packet retransmission timer expire using link acknowledgment. 
 
void SendUnreachError(Ipv4Address unreachNode, Ipv4Address destination, Ipv4Address originalDst, uint8_t salvage, uint8_t protocol)
This function is responsible for sending error packets in case of break link to next hop...
 
Time m_sendBufferTimeout
The maximum period of time that a routing protocol is allowed to buffer a packet for. 
 
int GetProtocolNumber(void) const 
Get the dsr protocol number. 
 
std::vector< Ipv4Address > IP_VECTOR
Define the vector to hold Ip address. 
 
Ipv4Address m_broadcast
The broadcast IP address. 
 
uint32_t m_numPriorityQueues
The number of priority queues used. 
 
uint32_t m_broadcastJitter
The max time to delay route request broadcast. 
 
void SetNode(Ptr< Node > node)
Set the node. 
 
static const uint8_t PROT_NUMBER
Define the dsr protocol number. 
 
uint32_t m_requestId
The id assigned to each route request. 
 
Ptr< dsr::RouteCache > GetRouteCache() const 
Get the route cache. 
 
void SetDownTarget6(IpL4Protocol::DownTargetCallback6 callback)
This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 ca...
 
Ptr< Ipv4L3Protocol > m_ipv4
Ipv4l3Protocol. 
 
uint32_t m_requestTableIds
The request table identifiers. 
 
void CancelNetworkPacketTimer(MaintainBuffEntry &mb)
Cancel the network packet retransmission timer for a specific maintenance entry. 
 
void SendReply(Ptr< Packet > packet, Ipv4Address source, Ipv4Address nextHop, Ptr< Ipv4Route > route)
Send the route reply back to the request originator with the cumulated route. 
 
uint8_t segsLeft
The segment left value from SR header. 
 
bool UpdateRouteEntry(Ipv4Address dst)
functions used to direct to route cache 
 
Time m_minLifeTime
The min life time. 
 
Time m_useExtends
The use extension of the life time for link cache. 
 
GraReply m_graReply
The gratuitous route reply. 
 
void ScheduleInitialReply(Ptr< Packet > packet, Ipv4Address source, Ipv4Address nextHop, Ptr< Ipv4Route > route)
this is a generating the initial route reply from the destination address, a random delay time [0...
 
std::vector< Ipv4Address > m_addresses
The bind ipv4 addresses with next hop, src, destination address in sequence. 
 
Time m_blacklistTimeout
The black list time out. 
 
void SetPassiveBuffer(Ptr< dsr::PassiveBuffer > r)
Set the node. 
 
std::map< NetworkKey, Timer > m_addressForwardTimer
Map network key + forward timer. 
 
std::map< Ipv4Address, Timer > m_addressReqTimer
Map IP address + RREQ timer. 
 
void SendPacketFromBuffer(DsrOptionSRHeader const &sourceRoute, Ipv4Address nextHop, uint8_t protocol)
This function is responsible for sending out data packets when have route, if no route found...
 
uint8_t m_maxSalvageCount
Maximum # times to salvage a packet. 
 
Time m_initStability
The initial stability value for link cache. 
 
Time m_requestPeriod
The base time interval between route requests. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
Ptr< dsr::DsrOptions > GetOption(int optionNumber)
Get the option corresponding to optionNumber. 
 
uint16_t GetIDfromIP(Ipv4Address address)
Get the node id from ip address. 
 
Ptr< Node > m_node
The node ptr. 
 
void CallCancelPacketTimer(uint16_t ackId, Ipv4Header const &ipv4Header, Ipv4Address realSrc, Ipv4Address realDst)
Call the cancel packet retransmission timer function. 
 
void ScheduleNetworkPacketRetry(MaintainBuffEntry &mb, bool isFirst, uint8_t protocol)
Schedule the packet retransmission based on network layer acknowledgment. 
 
uint32_t m_passiveRetries
of retries have been sent for passive acknowledgment
 
uint32_t m_maxNetworkSize
Maximum network queue size. 
 
Ptr< Ipv4Route > SetRoute(Ipv4Address nextHop, Ipv4Address srcAddress)
Set the route to use for data packets, used by the option headers when sending data/control packets...
 
void Send(Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol, Ptr< Ipv4Route > route)
This function is called by higher layer protocol when sending packets. 
 
uint8_t Process(Ptr< Packet > &packet, Ipv4Header const &ipv4Header, Ipv4Address dst, uint8_t *nextHeader, uint8_t protocol, bool &isDropped)
Process method Called from Ipv4L3Protocol::Receive. 
 
uint32_t m_tryPassiveAcks
Maximum number of packet transmission using passive acknowledgment. 
 
Ptr< NetDevice > GetNetDeviceFromContext(std::string context)
Get the netdevice from the context. 
 
ErrorBuffer m_errorBuffer
The error buffer to save the error messages. 
 
uint32_t m_maxMaintRexmt
Maximum number of retransmissions of data packets. 
 
uint16_t AddAckReqHeader(Ptr< Packet > &packet, Ipv4Address nextHop)
This function is called to add ack request header for network acknowledgement. 
 
void PacketNewRoute(Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol)
When route vector corrupted, originate a new packet, normally not happening. 
 
Time m_retransIncr
the increase time for retransmission timer when face network congestion 
 
void ScheduleLinkPacketRetry(MaintainBuffEntry &mb, uint8_t protocol)
Schedule the packet retransmission based on link-layer acknowledgment. 
 
void ForwardPacket(Ptr< const Packet > packet, DsrOptionSRHeader &sourceRoute, Ipv4Header const &ipv4Header, Ipv4Address source, Ipv4Address destination, Ipv4Address targetAddress, uint8_t protocol, Ptr< Ipv4Route > route)
Forward the packet using the route saved in the source route option header. 
 
Ptr< dsr::PassiveBuffer > m_passiveBuffer
A "drop-front" queue used by the routing layer to cache route request sent. 
 
std::map< LinkKey, Timer > m_linkAckTimer
The timer for link acknowledgment. 
 
MaintainBuffer m_maintainBuffer
The declaration of maintain buffer. 
 
L4 Protocol abstract base class. 
 
std::vector< Ipv4Address > m_clearList
The node that is clear to send packet to. 
 
void NotifyDataReceipt(std::string context, Ptr< const Packet > p)
Notify the data receipt. 
 
DSR Maintain Buffer Entry. 
 
void SendPacket(Ptr< Packet > packet, Ipv4Address source, Ipv4Address nextHop, uint8_t protocol)
This function is called by when really sending out the packet. 
 
void ScheduleRreqRetry(Ptr< Packet > packet, std::vector< Ipv4Address > address, bool nonProp, uint32_t requestId, uint8_t protocol)
Schedule the route request retry. 
 
IpL4Protocol::DownTargetCallback GetDownTarget(void) const 
This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 ca...
 
uint32_t m_maxRreqId
The max number of request ids for a single destination. 
 
virtual enum IpL4Protocol::RxStatus Receive(Ptr< Packet > p, Ipv4Header const &header, Ptr< Ipv4Interface > incomingInterface)
 
Ptr< dsr::PassiveBuffer > GetPassiveBuffer() const 
Get the passive buffer. 
 
uint32_t m_maxCacheLen
Max # of cache entries for route cache. 
 
std::string m_routeSortType
The type of route sort methods. 
 
void CheckSendBuffer()
Check the send buffer of packets with route when send buffer timer expire. 
 
std::map< uint32_t, Ptr< dsr::DsrNetworkQueue > > m_priorityQueue
priority queues 
 
std::map< PassiveKey, uint32_t > m_passiveCnt
Map packet key + passive forward counts. 
 
Ipv4 addresses are stored in host order in this class. 
 
virtual void NotifyNewAggregate()
Notify all Objects aggregated to this one of a new Object being aggregated. 
 
TracedCallback< Ptr< const Packet > > m_dropTrace
The trace for drop, receive and send data packets. 
 
Ptr< dsr::RreqTable > m_rreqTable
A "drop-front" queue used by the routing layer to cache route request sent. 
 
std::map< PassiveKey, Timer > m_passiveAckTimer
The timer for passive acknowledgment. 
 
void CancelPacketTimerNextHop(Ipv4Address nextHop, uint8_t protocol)
Cancel the packet retransmission timer for a all maintenance entries with nextHop address...
 
Ptr< Ipv4Route > m_ipv4Route
Ipv4 Route. 
 
void SendAck(uint16_t ackId, Ipv4Address destination, Ipv4Address realSrc, Ipv4Address realDst, uint8_t protocol, Ptr< Ipv4Route > route)
Send network layer acknowledgment back to the earlier hop to notify the receipt of data packet...
 
Time m_nodeTraversalTime
Time estimated for packet to travel between two nodes. 
 
void SetRequestTable(Ptr< dsr::RreqTable > r)
Set the node. 
 
bool m_subRoute
Whether to save sub route or not. 
 
bool CancelPassiveTimer(Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t segsLeft)
Cancel the passive timer. 
 
void Insert(Ptr< dsr::DsrOptions > option)
Insert a new Dsr Option. 
 
Ipv4Address GetIPfromMAC(Mac48Address address)
Get the Ip address from mac address. 
 
bool SendRealDown(DsrNetworkQueueEntry &newEntry)
This function is called to send packets down stack. 
 
void RouteRequestTimerExpire(Ptr< Packet > packet, std::vector< Ipv4Address > address, uint32_t requestId, uint8_t protocol)
Handle route discovery timer. 
 
uint32_t m_rreqRetries
Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route. 
 
DsrNetworkQueue m_networkQueue
The network queue. 
 
Time m_maxRreqTime
Max time for caching the route request entry. 
 
void PriorityScheduler(uint32_t priority, bool continueWithFirst)
This function is called to schedule sending packets from the network queue by priority. 
 
Timer m_sendBuffTimer
The send buffer timer. 
 
bool FindSourceEntry(Ipv4Address src, Ipv4Address dst, uint16_t id)
functions used to direct to route cache 
 
Ptr< UniformRandomVariable > m_uniformRandomVariable
Provides uniform random variables. 
 
Ptr< Node > GetNodeWithAddress(Ipv4Address ipv4Address)
Get the node with give ip address. 
 
void SetRouteCache(Ptr< dsr::RouteCache > r)
Set the route cache. 
 
DsrOptionList_t m_options
List of DSR Options supported. 
 
void SendGratuitousReply(Ipv4Address replyTo, Ipv4Address replyFrom, std::vector< Ipv4Address > &nodeList, uint8_t protocol)
Send the gratuitous reply. 
 
void SendErrorRequest(DsrOptionRerrUnreachHeader &rerr, uint8_t protocol)
Send the error request packet. 
 
void CancelPacketAllTimer(MaintainBuffEntry &mb)
Cancel all the packet timers. 
 
Ptr< Node > GetNode() const 
Get the node. 
 
SendBuffer m_sendBuffer
The send buffer. 
 
std::map< LinkKey, uint32_t > m_linkCnt
Map packet key + link forward counts. 
 
bool LookupRoute(Ipv4Address id, RouteCacheEntry &rt)
functions used to direct to route cache 
 
IpL4Protocol::DownTargetCallback6 GetDownTarget6(void) const 
This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 ca...
 
std::map< NetworkKey, uint32_t > m_addressForwardCnt
Map network key + forward counts. 
 
a unique identifier for an interface. 
 
Time m_nonpropRequestTimeout
The non-propagation request timeout. 
 
std::map< Ipv4Address, Timer > m_nonPropReqTimer
Map IP address + RREQ timer. 
 
bool m_linkAck
define if we use link acknowledgement or not 
 
std::vector< std::string > GetElementsFromContext(std::string context)
Get the elements from the tracing context. 
 
void PassiveScheduleTimerExpire(MaintainBuffEntry &mb, uint8_t protocol)
This function deals with packet retransmission timer expire using passive acknowledgment. 
 
void CancelPassivePacketTimer(MaintainBuffEntry &mb)
Cancel the passive packet retransmission timer for a specific maintenance entry. 
 
std::list< Ptr< DsrOptions > > DsrOptionList_t
Define the list to hold DSR options. 
 
IpL4Protocol::DownTargetCallback m_downTarget
The callback for down layer. 
 
void UseExtends(RouteCacheEntry::IP_VECTOR rt)
functions used to direct to route cache 
 
maintain the gratuitous reply 
 
Time m_maxMaintainTime
Time out for maintainance buffer. 
 
void CancelRreqTimer(Ipv4Address dst, bool isRemove)
Cancel the route request timer. 
 
virtual ~DsrRouting()
Destructor. 
 
void SchedulePassivePacketRetry(MaintainBuffEntry &mb, uint8_t protocol)
Schedule the packet retransmission based on passive acknowledgment.