Dsr Routing base. More...
#include "dsr-routing.h"
Public Member Functions | |
DsrRouting () | |
Constructor. | |
~DsrRouting () override | |
Destructor. | |
uint16_t | AddAckReqHeader (Ptr< Packet > &packet, Ipv4Address nextHop) |
This function is called to add ack request header for network acknowledgement. | |
bool | AddRoute (DsrRouteCacheEntry &rt) |
Add route cache entry if it doesn't yet exist in route cache See also DsrRouteCache::AddRoute. | |
bool | AddRoute_Link (DsrRouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source) |
dd route link to cache See also DsrRouteCache::AddRoute_Link | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. | |
void | CallCancelPacketTimer (uint16_t ackId, const Ipv4Header &ipv4Header, Ipv4Address realSrc, Ipv4Address realDst) |
Call the cancel packet retransmission timer function. | |
void | CancelLinkPacketTimer (DsrMaintainBuffEntry &mb) |
Cancel the link packet retransmission timer for a specific maintenance entry. | |
void | CancelNetworkPacketTimer (DsrMaintainBuffEntry &mb) |
Cancel the network packet retransmission timer for a specific maintenance entry. | |
void | CancelPacketAllTimer (DsrMaintainBuffEntry &mb) |
Cancel all the packet timers. | |
void | CancelPacketTimerNextHop (Ipv4Address nextHop, uint8_t protocol) |
Cancel the packet retransmission timer for a all maintenance entries with nextHop address. | |
void | CancelPassivePacketTimer (DsrMaintainBuffEntry &mb) |
Cancel the passive packet retransmission timer for a specific maintenance entry. | |
bool | CancelPassiveTimer (Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t segsLeft) |
Cancel the passive timer. | |
void | CancelRreqTimer (Ipv4Address dst, bool isRemove) |
Cancel the route request timer. | |
void | CheckSendBuffer () |
Check the send buffer of packets with route when send buffer timer expire. | |
void | DeleteAllRoutesIncludeLink (Ipv4Address errorSrc, Ipv4Address unreachNode, Ipv4Address node) |
Delete all the routes which includes the link from next hop address that has just been notified as unreachable. | |
bool | FindSourceEntry (Ipv4Address src, Ipv4Address dst, uint16_t id) |
Find the source request entry in the route request queue, return false if not found. | |
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. | |
void | ForwardPacket (Ptr< const Packet > packet, DsrOptionSRHeader &sourceRoute, const Ipv4Header &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. | |
IpL4Protocol::DownTargetCallback | GetDownTarget () const override |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case) | |
IpL4Protocol::DownTargetCallback6 | GetDownTarget6 () const override |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case) | |
std::vector< std::string > | GetElementsFromContext (std::string context) |
Get the elements from the tracing context. | |
uint16_t | GetIDfromIP (Ipv4Address address) |
Get the node id from ip address. | |
Ipv4Address | GetIPfromID (uint16_t id) |
Get the ip address from id. | |
Ipv4Address | GetIPfromMAC (Mac48Address address) |
Get the Ip address from mac address. | |
Ptr< NetDevice > | GetNetDeviceFromContext (std::string context) |
Get the netdevice from the context. | |
Ptr< Node > | GetNode () const |
Get the node. | |
Ptr< Node > | GetNodeWithAddress (Ipv4Address ipv4Address) |
Get the node with give ip address. | |
Ptr< dsr::DsrOptions > | GetOption (int optionNumber) |
Get the option corresponding to optionNumber. | |
Ptr< dsr::DsrPassiveBuffer > | GetPassiveBuffer () const |
Get the passive buffer. | |
uint32_t | GetPriority (DsrMessageType messageType) |
Set the priority of the packet in network queue. | |
int | GetProtocolNumber () const override |
Get the dsr protocol number. | |
Ptr< dsr::DsrRreqTable > | GetRequestTable () const |
Get the request table. | |
Ptr< dsr::DsrRouteCache > | GetRouteCache () const |
Get the route cache. | |
void | IncreaseRetransTimer () |
This function is called to increase the retransmission timer for data packet in the network queue. | |
void | Insert (Ptr< dsr::DsrOptions > option) |
Insert a new Dsr Option. | |
bool | IsLinkCache () |
Checks if the link is cached in the route cache See also DsrRouteCache::IsLinkCache. | |
void | LinkScheduleTimerExpire (DsrMaintainBuffEntry &mb, uint8_t protocol) |
This function deals with packet retransmission timer expire using link acknowledgment. | |
bool | LookupRoute (Ipv4Address id, DsrRouteCacheEntry &rt) |
Lookup route cache entry with destination address dst See also DsrRouteCache::LookupRoute. | |
void | NetworkScheduleTimerExpire (DsrMaintainBuffEntry &mb, uint8_t protocol) |
This function deals with packet retransmission timer expire using network acknowledgment. | |
void | PacketNewRoute (Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol) |
When route vector corrupted, originate a new packet, normally not happening. | |
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 | PassiveScheduleTimerExpire (DsrMaintainBuffEntry &mb, uint8_t protocol) |
This function deals with packet retransmission timer expire using passive acknowledgment. | |
void | PrintVector (std::vector< Ipv4Address > &vec) |
Print the route vector. | |
void | PriorityScheduler (uint32_t priority, bool continueWithFirst) |
This function is called to schedule sending packets from the network queue by priority. | |
uint8_t | Process (Ptr< Packet > &packet, const Ipv4Header &ipv4Header, Ipv4Address dst, uint8_t *nextHeader, uint8_t protocol, bool &isDropped) |
Process method Called from Ipv4L3Protocol::Receive. | |
IpL4Protocol::RxStatus | Receive (Ptr< Packet > p, const Ipv4Header &header, Ptr< Ipv4Interface > incomingInterface) override |
IpL4Protocol::RxStatus | Receive (Ptr< Packet > p, const Ipv6Header &header, Ptr< Ipv6Interface > incomingInterface) override |
void | RouteRequestTimerExpire (Ptr< Packet > packet, std::vector< Ipv4Address > address, uint32_t requestId, uint8_t protocol) |
Handle route discovery timer. | |
void | SalvagePacket (Ptr< const Packet > packet, Ipv4Address source, Ipv4Address dst, uint8_t protocol) |
Salvage the packet which has been transmitted for 3 times. | |
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. | |
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, m_broadcastJitter] is used before unicasting back the route reply packet | |
void | ScheduleInterRequest (Ptr< Packet > packet) |
Schedule the intermediate route request. | |
void | ScheduleLinkPacketRetry (DsrMaintainBuffEntry &mb, uint8_t protocol) |
Schedule the packet retransmission based on link-layer acknowledgment. | |
void | ScheduleNetworkPacketRetry (DsrMaintainBuffEntry &mb, bool isFirst, uint8_t protocol) |
Schedule the packet retransmission based on network layer acknowledgment. | |
void | SchedulePassivePacketRetry (DsrMaintainBuffEntry &mb, uint8_t protocol) |
Schedule the packet retransmission based on passive acknowledgment. | |
void | Scheduler (uint32_t priority) |
This function is called to schedule sending packets from the network queue. | |
void | ScheduleRreqRetry (Ptr< Packet > packet, std::vector< Ipv4Address > address, bool nonProp, uint32_t requestId, uint8_t protocol) |
Schedule the route request retry. | |
Ipv4Address | SearchNextHop (Ipv4Address ipv4Address, std::vector< Ipv4Address > &vec) |
Get the next hop of the route. | |
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. | |
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. | |
void | SendBuffTimerExpire () |
The send buffer timer expire. | |
void | SendErrorRequest (DsrOptionRerrUnreachHeader &rerr, uint8_t protocol) |
Send the error request packet. | |
void | SendGratuitousReply (Ipv4Address replyTo, Ipv4Address replyFrom, std::vector< Ipv4Address > &nodeList, uint8_t protocol) |
Send the gratuitous reply. | |
void | SendInitialRequest (Ipv4Address source, Ipv4Address destination, uint8_t protocol) |
Broadcast the route request packet in subnet. | |
void | SendPacket (Ptr< Packet > packet, Ipv4Address source, Ipv4Address nextHop, uint8_t protocol) |
This function is called by when really sending out the packet. | |
void | SendPacketFromBuffer (const DsrOptionSRHeader &sourceRoute, Ipv4Address nextHop, uint8_t protocol) |
This function is responsible for sending out data packets when have route, if no route found, it will cache the packet and send out route requests. | |
bool | SendRealDown (DsrNetworkQueueEntry &newEntry) |
This function is called to send packets down stack. | |
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. | |
void | SendRequest (Ptr< Packet > packet, Ipv4Address source) |
Forward the route request if the node is not the destination. | |
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. | |
void | SetDownTarget (IpL4Protocol::DownTargetCallback callback) override |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 case) | |
void | SetDownTarget6 (IpL4Protocol::DownTargetCallback6 callback) override |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 case) | |
void | SetNode (Ptr< Node > node) |
Set the node. | |
void | SetPassiveBuffer (Ptr< dsr::DsrPassiveBuffer > r) |
Set the node. | |
void | SetRequestTable (Ptr< dsr::DsrRreqTable > r) |
Set the node. | |
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 | SetRouteCache (Ptr< dsr::DsrRouteCache > r) |
Set the route cache. | |
bool | UpdateRouteEntry (Ipv4Address dst) |
Update route cache entry if it has been recently used and successfully delivered the data packet. | |
void | UseExtends (DsrRouteCacheEntry::IP_VECTOR rt) |
Extends the lifetime of a route cache entry. | |
Public Member Functions inherited from ns3::IpL4Protocol | |
~IpL4Protocol () override | |
virtual DownTargetCallback | GetDownTarget () const =0 |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case) | |
virtual DownTargetCallback6 | GetDownTarget6 () const =0 |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case) | |
virtual int | GetProtocolNumber () const =0 |
Returns the protocol number of this protocol. | |
virtual RxStatus | Receive (Ptr< Packet > p, const Ipv4Header &header, Ptr< Ipv4Interface > incomingInterface)=0 |
Called from lower-level layers to send the packet up in the stack. | |
virtual RxStatus | Receive (Ptr< Packet > p, const Ipv6Header &header, Ptr< Ipv6Interface > incomingInterface)=0 |
Called from lower-level layers to send the packet up in the stack. | |
virtual void | ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, Ipv4Address payloadSource, Ipv4Address payloadDestination, const uint8_t payload[8]) |
Called from lower-level layers to send the ICMP packet up in the stack. | |
virtual void | ReceiveIcmp (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, Ipv6Address payloadSource, Ipv6Address payloadDestination, const uint8_t payload[8]) |
Called from lower-level layers to send the ICMPv6 packet up in the stack. | |
virtual void | SetDownTarget (DownTargetCallback cb)=0 |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 case) | |
virtual void | SetDownTarget6 (DownTargetCallback6 cb)=0 |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 case) | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. | |
~Object () override | |
Destructor. | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. | |
void | Dispose () |
Dispose of this Object. | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. | |
bool | IsInitialized () const |
Check if the object has been initialized. | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
virtual TypeId | GetInstanceTypeId () const =0 |
Get the most derived TypeId for this Object. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type identificator. | |
Static Public Member Functions inherited from ns3::IpL4Protocol | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Attributes | |
static const uint8_t | PROT_NUMBER = 48 |
Define the dsr protocol number. | |
Protected Member Functions | |
void | DoDispose () override |
Drop trace callback. | |
void | NotifyNewAggregate () override |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. | |
virtual void | DoDispose () |
Destructor implementation. | |
virtual void | DoInitialize () |
Initialize() implementation. | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Protected Attributes | |
TracedCallback< Ptr< const Packet > > | m_dropTrace |
The trace for drop, receive and send data packets. | |
TracedCallback< const DsrOptionSRHeader & > | m_txPacketTrace |
packet trace callback | |
Private Types | |
typedef std::list< Ptr< DsrOptions > > | DsrOptionList_t |
Define the list to hold DSR options. | |
Private Member Functions | |
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. | |
void | SendRerrWhenBreaksLinkToNextHop (Ipv4Address nextHop, uint8_t protocol) |
Send the route error message when the link breaks to the next hop. | |
void | Start () |
Private Attributes | |
uint16_t | m_ackId |
The ack id assigned to each acknowledge. | |
std::vector< Ipv4Address > | m_addresses |
The bind ipv4 addresses with next hop, src, destination address in sequence. | |
std::map< NetworkKey, uint32_t > | m_addressForwardCnt |
Map network key + forward counts. | |
std::map< NetworkKey, Timer > | m_addressForwardTimer |
Map network key + forward timer. | |
std::map< Ipv4Address, Timer > | m_addressReqTimer |
Map IP address + RREQ timer. | |
Time | m_blacklistTimeout |
The black list time out. | |
Ipv4Address | m_broadcast |
The broadcast IP address. | |
uint32_t | m_broadcastJitter |
The max time to delay route request broadcast. | |
std::string | m_cacheType |
The type of route cache. | |
std::vector< Ipv4Address > | m_clearList |
The node that is clear to send packet to. | |
uint32_t | m_discoveryHopLimit |
Maximum hops to go for route request. | |
IpL4Protocol::DownTargetCallback | m_downTarget |
The callback for down layer. | |
DsrErrorBuffer | m_errorBuffer |
The error buffer to save the error messages. | |
std::vector< Ipv4Address > | m_finalRoute |
The route cache. | |
DsrGraReply | m_graReply |
The gratuitous route reply. | |
uint32_t | m_graReplyTableSize |
Set the gratuitous reply table size. | |
Time | m_gratReplyHoldoff |
The max gratuitous reply hold off time. | |
Time | m_initStability |
The initial stability value for link cache. | |
Ptr< Ipv4 > | m_ip |
The ip ptr. | |
Ptr< Ipv4L3Protocol > | m_ipv4 |
Ipv4l3Protocol. | |
Ptr< Ipv4Route > | m_ipv4Route |
Ipv4 Route. | |
bool | m_linkAck |
define if we use link acknowledgement or not | |
Time | m_linkAckTimeout |
The timeout value for link acknowledge. | |
std::map< LinkKey, Timer > | m_linkAckTimer |
The timer for link acknowledgment. | |
std::map< LinkKey, uint32_t > | m_linkCnt |
Map packet key + link forward counts. | |
uint32_t | m_linkRetries |
std::map< std::string, uint32_t > | m_macToNodeIdMap |
The map of mac address to node id. | |
Ipv4Address | m_mainAddress |
Our own Ip address. | |
DsrMaintainBuffer | m_maintainBuffer |
The declaration of maintain buffer. | |
uint32_t | m_maxCacheLen |
Max # of cache entries for route cache. | |
Time | m_maxCacheTime |
Max time for caching the route cache entry. | |
uint32_t | m_maxEntriesEachDst |
Max number of route entries to save for each destination. | |
uint32_t | m_maxMaintainLen |
Max # of entries for maintenance buffer. | |
Time | m_maxMaintainTime |
Time out for maintenance buffer. | |
uint32_t | m_maxMaintRexmt |
Maximum number of retransmissions of data packets. | |
Time | m_maxNetworkDelay |
Maximum network delay. | |
uint32_t | m_maxNetworkSize |
Maximum network queue size. | |
Time | m_maxRequestPeriod |
The max request period. | |
uint32_t | m_maxRreqId |
The max number of request ids for a single destination. | |
Time | m_maxRreqTime |
Max time for caching the route request entry. | |
uint8_t | m_maxSalvageCount |
Maximum # times to salvage a packet. | |
uint32_t | m_maxSendBuffLen |
The maximum number of packets that we allow a routing protocol to buffer. | |
Time | m_minLifeTime |
The min life time. | |
DsrNetworkQueue | m_networkQueue |
The network queue. | |
Ptr< Node > | m_node |
The node ptr. | |
Time | m_nodeTraversalTime |
Time estimated for packet to travel between two nodes. | |
std::map< Ipv4Address, Timer > | m_nonPropReqTimer |
Map IP address + RREQ timer. | |
Time | m_nonpropRequestTimeout |
The non-propagation request timeout. | |
uint32_t | m_numPriorityQueues |
The number of priority queues used. | |
DsrOptionList_t | m_options |
List of DSR Options supported. | |
Time | m_passiveAckTimeout |
The timeout value for passive acknowledge. | |
std::map< PassiveKey, Timer > | m_passiveAckTimer |
The timer for passive acknowledgment. | |
Ptr< dsr::DsrPassiveBuffer > | m_passiveBuffer |
A "drop-front" queue used by the routing layer to cache route request sent. | |
std::map< PassiveKey, uint32_t > | m_passiveCnt |
Map packet key + passive forward counts. | |
uint32_t | m_passiveRetries |
std::map< uint32_t, Ptr< dsr::DsrNetworkQueue > > | m_priorityQueue |
priority queues | |
uint32_t | m_requestId |
The id assigned to each route request. | |
Time | m_requestPeriod |
The base time interval between route requests. | |
uint32_t | m_requestTableIds |
The request table identifiers. | |
uint32_t | m_requestTableSize |
The max size of the request table size. | |
Time | m_retransIncr |
the increase time for retransmission timer when face network congestion | |
Ptr< dsr::DsrRouteCache > | m_routeCache |
A "drop-front" queue used by the routing layer to cache routes found. | |
std::string | m_routeSortType |
The type of route sort methods. | |
uint32_t | m_rreqRetries |
Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route. | |
Ptr< dsr::DsrRreqTable > | m_rreqTable |
A "drop-front" queue used by the routing layer to cache route request sent. | |
DsrSendBuffer | m_sendBuffer |
The send buffer. | |
Time | m_sendBufferTimeout |
The maximum period of time that a routing protocol is allowed to buffer a packet for. | |
Time | m_sendBuffInterval |
how often to check send buffer | |
Timer | m_sendBuffTimer |
The send buffer timer. | |
uint32_t | m_sendRetries |
uint32_t | m_stabilityDecrFactor |
The initial decrease factor for link cache. | |
uint32_t | m_stabilityIncrFactor |
The initial increase factor for link cache. | |
bool | m_subRoute |
Whether to save sub route or not. | |
uint32_t | m_tryLinkAcks |
Maximum number of packet transmission using link acknowledgment. | |
uint32_t | m_tryPassiveAcks |
Maximum number of packet transmission using passive acknowledgment. | |
Ptr< UniformRandomVariable > | m_uniformRandomVariable |
Provides uniform random variables. | |
Time | m_useExtends |
The use extension of the life time for link cache. | |
uint8_t | segsLeft |
The segment left value from SR header. | |
Additional Inherited Members | |
Public Types inherited from ns3::IpL4Protocol | |
typedef Callback< void, Ptr< Packet >, Ipv4Address, Ipv4Address, uint8_t, Ptr< Ipv4Route > > | DownTargetCallback |
callback to send packets over IPv4 | |
typedef Callback< void, Ptr< Packet >, Ipv6Address, Ipv6Address, uint8_t, Ptr< Ipv6Route > > | DownTargetCallback6 |
callback to send packets over IPv6 | |
enum | RxStatus { RX_OK , RX_CSUM_FAILED , RX_ENDPOINT_CLOSED , RX_ENDPOINT_UNREACH } |
Rx status codes. More... | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Dsr Routing base.
ns3::dsr::DsrRouting is accessible through the following paths with Config::Set and Config::Connect:
Time
+9.22337e+18ns:+9.22337e+18ns std::string
Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Time
+9.22337e+18ns:+9.22337e+18ns Size of this type is 1376 bytes (on a 64-bit architecture).
Definition at line 97 of file dsr-routing.h.
|
private |
Define the list to hold DSR options.
Definition at line 784 of file dsr-routing.h.
ns3::dsr::DsrRouting::DsrRouting | ( | ) |
Constructor.
Definition at line 364 of file dsr-routing.cc.
References Insert(), m_sendBuffTimer, m_uniformRandomVariable, NS_LOG_FUNCTION_NOARGS, ns3::Timer::Schedule(), ns3::Seconds(), SendBuffTimerExpire(), and ns3::Timer::SetFunction().
|
override |
uint16_t ns3::dsr::DsrRouting::AddAckReqHeader | ( | Ptr< Packet > & | packet, |
Ipv4Address | nextHop | ||
) |
This function is called to add ack request header for network acknowledgement.
packet | for ack req |
nextHop | IP address of the next hop |
Definition at line 1688 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), ns3::dsr::DsrFsHeader::GetDestId(), ns3::dsr::DsrOptionField::GetDsrOptionsOffset(), ns3::dsr::DsrOptionHeader::GetLength(), ns3::dsr::DsrFsHeader::GetNextHeader(), ns3::dsr::DsrFsHeader::GetSourceId(), m_ackId, m_routeCache, NS_LOG_FUNCTION, ns3::dsr::DsrOptionAckReqHeader::SetAckId(), ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrOptionSRHeader::SetNumberAddress(), ns3::dsr::DsrFsHeader::SetPayloadLength(), and ns3::dsr::DsrFsHeader::SetSourceId().
Referenced by ScheduleNetworkPacketRetry().
bool ns3::dsr::DsrRouting::AddRoute | ( | DsrRouteCacheEntry & | rt | ) |
Add route cache entry if it doesn't yet exist in route cache See also DsrRouteCache::AddRoute.
rt | route cache entry |
Definition at line 690 of file dsr-routing.cc.
References ns3::dsr::DsrErrorBuffer::DropPacketForErrLink(), ns3::dsr::DsrRouteCacheEntry::GetVector(), m_errorBuffer, m_mainAddress, m_routeCache, and SearchNextHop().
bool ns3::dsr::DsrRouting::AddRoute_Link | ( | DsrRouteCacheEntry::IP_VECTOR | nodelist, |
Ipv4Address | source | ||
) |
dd route link to cache See also DsrRouteCache::AddRoute_Link
nodelist | vector of nodes |
source | ip address of node to add |
Definition at line 682 of file dsr-routing.cc.
References ns3::dsr::DsrErrorBuffer::DropPacketForErrLink(), m_errorBuffer, m_routeCache, and SearchNextHop().
int64_t ns3::dsr::DsrRouting::AssignStreams | ( | int64_t | stream | ) |
Assign a fixed random variable stream number to the random variables used by this model.
Return the number of streams (possibly zero) that have been assigned.
stream | first stream index to use |
Definition at line 2813 of file dsr-routing.cc.
References m_uniformRandomVariable, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
void ns3::dsr::DsrRouting::CallCancelPacketTimer | ( | uint16_t | ackId, |
const Ipv4Header & | ipv4Header, | ||
Ipv4Address | realSrc, | ||
Ipv4Address | realDst | ||
) |
Call the cancel packet retransmission timer function.
ackId | acknowledge ID |
ipv4Header | header |
realSrc | source IP address |
realDst | destination IP address |
Definition at line 2210 of file dsr-routing.cc.
References CancelNetworkPacketTimer(), ns3::Ipv4Header::GetDestination(), ns3::Ipv4Header::GetSource(), ns3::Simulator::Now(), and NS_LOG_FUNCTION.
void ns3::dsr::DsrRouting::CancelLinkPacketTimer | ( | DsrMaintainBuffEntry & | mb | ) |
Cancel the link packet retransmission timer for a specific maintenance entry.
mb | maintain buffer entry |
TODO need to think about this part
Definition at line 2244 of file dsr-routing.cc.
References ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffer::GetSize(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::DsrMaintainBuffer::LinkEqual(), ns3::dsr::LinkKey::m_destination, m_linkAckTimer, m_linkCnt, m_maintainBuffer, ns3::dsr::LinkKey::m_nextHop, ns3::dsr::LinkKey::m_ourAdd, ns3::dsr::LinkKey::m_source, NS_LOG_DEBUG, NS_LOG_FUNCTION, and NS_LOG_INFO.
Referenced by CancelPacketAllTimer().
void ns3::dsr::DsrRouting::CancelNetworkPacketTimer | ( | DsrMaintainBuffEntry & | mb | ) |
Cancel the network packet retransmission timer for a specific maintenance entry.
mb | maintain buffer entry |
Definition at line 2292 of file dsr-routing.cc.
References ns3::dsr::DsrMaintainBuffEntry::GetAckId(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::NetworkKey::m_ackId, m_addressForwardCnt, m_addressForwardTimer, ns3::dsr::NetworkKey::m_destination, m_maintainBuffer, ns3::dsr::NetworkKey::m_nextHop, ns3::dsr::NetworkKey::m_ourAdd, ns3::dsr::NetworkKey::m_source, ns3::dsr::DsrMaintainBuffer::NetworkEqual(), NS_LOG_FUNCTION, and NS_LOG_INFO.
Referenced by CallCancelPacketTimer(), and CancelPacketAllTimer().
void ns3::dsr::DsrRouting::CancelPacketAllTimer | ( | DsrMaintainBuffEntry & | mb | ) |
Cancel all the packet timers.
mb | maintain buffer entry |
Definition at line 2235 of file dsr-routing.cc.
References CancelLinkPacketTimer(), CancelNetworkPacketTimer(), CancelPassivePacketTimer(), and NS_LOG_FUNCTION.
Referenced by CancelPacketTimerNextHop().
void ns3::dsr::DsrRouting::CancelPacketTimerNextHop | ( | Ipv4Address | nextHop, |
uint8_t | protocol | ||
) |
Cancel the packet retransmission timer for a all maintenance entries with nextHop address.
nextHop | next hop IP address |
protocol | number |
TODO if the errorDst is not seen before
TODO need to think about whether we need the network queue entry or not
Definition at line 2373 of file dsr-routing.cc.
References CancelPacketAllTimer(), CancelPacketTimerNextHop(), ns3::Packet::Copy(), ns3::dsr::DsrMaintainBuffer::Dequeue(), ns3::dsr::DsrMaintainBuffer::Find(), ns3::dsr::DsrOptionField::GetDsrOptionsOffset(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::UniformRandomVariable::GetInteger(), ns3::dsr::DsrOptionSRHeader::GetNodesAddress(), ns3::dsr::DsrMaintainBuffEntry::GetPacket(), ns3::dsr::DsrOptionSRHeader::GetSalvage(), ns3::dsr::DsrMaintainBuffer::GetSize(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), m_maintainBuffer, m_uniformRandomVariable, ns3::MilliSeconds(), NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, PrintVector(), SalvagePacket(), ns3::Simulator::Schedule(), SendUnreachError(), and ns3::dsr::DsrOptionSRHeader::SetNumberAddress().
Referenced by CancelPacketTimerNextHop(), LinkScheduleTimerExpire(), and NetworkScheduleTimerExpire().
void ns3::dsr::DsrRouting::CancelPassivePacketTimer | ( | DsrMaintainBuffEntry & | mb | ) |
Cancel the passive packet retransmission timer for a specific maintenance entry.
mb | maintain buffer entry |
Definition at line 2339 of file dsr-routing.cc.
References ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::PassiveKey::m_ackId, ns3::dsr::PassiveKey::m_destination, m_passiveAckTimer, m_passiveCnt, ns3::dsr::PassiveKey::m_segsLeft, ns3::dsr::PassiveKey::m_source, NS_LOG_FUNCTION, and NS_LOG_INFO.
Referenced by CancelPacketAllTimer(), CancelPassiveTimer(), PassiveEntryCheck(), and PassiveScheduleTimerExpire().
bool ns3::dsr::DsrRouting::CancelPassiveTimer | ( | Ptr< Packet > | packet, |
Ipv4Address | source, | ||
Ipv4Address | destination, | ||
uint8_t | segsLeft | ||
) |
Cancel the passive timer.
packet | to process |
source | IP address |
destination | IP address |
segsLeft | segments left |
Definition at line 2181 of file dsr-routing.cc.
References CancelPassivePacketTimer(), m_maintainBuffer, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::dsr::DsrMaintainBuffer::PromiscEqual(), segsLeft, ns3::dsr::DsrMaintainBuffEntry::SetAckId(), ns3::dsr::DsrMaintainBuffEntry::SetDst(), ns3::dsr::DsrMaintainBuffEntry::SetPacket(), ns3::dsr::DsrMaintainBuffEntry::SetSegsLeft(), and ns3::dsr::DsrMaintainBuffEntry::SetSrc().
void ns3::dsr::DsrRouting::CancelRreqTimer | ( | Ipv4Address | dst, |
bool | isRemove | ||
) |
Cancel the route request timer.
dst | The dst address of the route request timer |
isRemove | whether to remove the route request entry or not |
Definition at line 3100 of file dsr-routing.cc.
References m_addressReqTimer, m_nonPropReqTimer, m_rreqTable, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by RouteRequestTimerExpire(), and SendErrorRequest().
void ns3::dsr::DsrRouting::CheckSendBuffer | ( | ) |
Check the send buffer of packets with route when send buffer timer expire.
When found a route and use it, UseExtends to the link cache
This will be priority 0
When found a route and use it, UseExtends to the link cache
Definition at line 864 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), data, ns3::dsr::DSR_CONTROL_PACKET, ns3::dsr::DsrMaintainBuffer::Enqueue(), ns3::dsr::DsrMaintainBuffEntry::GetAckId(), ns3::dsr::DsrSendBuffer::GetBuffer(), ns3::dsr::DsrOptionField::GetDsrOptionsOffset(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrOptionRerrUnreachHeader::GetErrorDst(), ns3::dsr::DsrOptionRerrUnreachHeader::GetErrorSrc(), GetIDfromIP(), ns3::dsr::DsrOptionHeader::GetLength(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), GetPriority(), ns3::dsr::DsrOptionRerrUnreachHeader::GetSalvage(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrSendBuffer::GetSize(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::DsrOptionRerrUnreachHeader::GetUnreachNode(), ns3::dsr::DsrRouteCacheEntry::GetVector(), ns3::Timer::IsSuspended(), ns3::dsr::NetworkKey::m_ackId, ns3::dsr::PassiveKey::m_ackId, m_addressForwardCnt, ns3::dsr::LinkKey::m_destination, ns3::dsr::NetworkKey::m_destination, ns3::dsr::PassiveKey::m_destination, m_ip, m_ipv4Route, m_linkAck, m_linkCnt, m_mainAddress, m_maintainBuffer, m_maxMaintainTime, ns3::dsr::LinkKey::m_nextHop, ns3::dsr::NetworkKey::m_nextHop, ns3::dsr::LinkKey::m_ourAdd, ns3::dsr::NetworkKey::m_ourAdd, m_passiveCnt, m_priorityQueue, m_routeCache, ns3::dsr::PassiveKey::m_segsLeft, m_sendBuffer, m_sendBuffInterval, m_sendBuffTimer, ns3::dsr::LinkKey::m_source, ns3::dsr::NetworkKey::m_source, ns3::dsr::PassiveKey::m_source, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_INFO, NS_LOG_LOGIC, PacketNewRoute(), ns3::Timer::Resume(), ns3::Time::S, ns3::Simulator::Schedule(), ScheduleLinkPacketRetry(), ScheduleNetworkPacketRetry(), SchedulePassivePacketRetry(), SearchNextHop(), SendBuffTimerExpire(), ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrOptionRerrUnreachHeader::SetErrorDst(), ns3::dsr::DsrOptionRerrUnreachHeader::SetErrorSrc(), ns3::dsr::DsrOptionRerrHeader::SetErrorType(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrOptionSRHeader::SetNodesAddress(), ns3::dsr::DsrFsHeader::SetPayloadLength(), SetRoute(), ns3::dsr::DsrOptionSRHeader::SetSalvage(), ns3::dsr::DsrOptionRerrUnreachHeader::SetSalvage(), ns3::dsr::DsrOptionSRHeader::SetSegmentsLeft(), ns3::dsr::DsrFsHeader::SetSourceId(), ns3::dsr::DsrOptionRerrUnreachHeader::SetUnreachNode(), and ns3::Timer::Suspend().
Referenced by SendBuffTimerExpire().
void ns3::dsr::DsrRouting::DeleteAllRoutesIncludeLink | ( | Ipv4Address | errorSrc, |
Ipv4Address | unreachNode, | ||
Ipv4Address | node | ||
) |
Delete all the routes which includes the link from next hop address that has just been notified as unreachable.
See also DsrRouteCache::DeleteAllRoutesIncludeLink
errorSrc | The error source address |
unreachNode | The unreachable node |
node | This node's ip address |
Definition at line 699 of file dsr-routing.cc.
References m_routeCache.
|
overrideprotectedvirtual |
Drop trace callback.
Reimplemented from ns3::Object.
Definition at line 565 of file dsr-routing.cc.
References ns3::Object::DoDispose(), m_ipv4, m_node, m_routeCache, and NS_LOG_FUNCTION_NOARGS.
bool ns3::dsr::DsrRouting::FindSourceEntry | ( | Ipv4Address | src, |
Ipv4Address | dst, | ||
uint16_t | id | ||
) |
Find the source request entry in the route request queue, return false if not found.
See also DsrRreqTable::FindSourceEntry
src | the source address we just received the source request |
dst | the destination address the request is targeted at |
id | the identification number for this request |
Definition at line 713 of file dsr-routing.cc.
References m_rreqTable.
void ns3::dsr::DsrRouting::ForwardErrPacket | ( | DsrOptionRerrUnreachHeader & | rerr, |
DsrOptionSRHeader & | sourceRoute, | ||
Ipv4Address | nextHop, | ||
uint8_t | protocol, | ||
Ptr< Ipv4Route > | route | ||
) |
This function is responsible for forwarding error packets along the route.
rerr | unreachable header |
sourceRoute | source routing header |
nextHop | IP address of next hop |
protocol | number |
route | IP route |
Definition at line 1480 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), ns3::dsr::DSR_CONTROL_PACKET, ns3::dsr::DsrOptionRerrUnreachHeader::GetErrorDst(), ns3::dsr::DsrOptionRerrUnreachHeader::GetErrorSrc(), GetIDfromIP(), ns3::dsr::DsrOptionHeader::GetLength(), GetPriority(), ns3::Callback< R, UArgs >::IsNull(), m_downTarget, m_ip, m_mainAddress, m_priorityQueue, ns3::Simulator::Now(), NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrFsHeader::SetPayloadLength(), and ns3::dsr::DsrFsHeader::SetSourceId().
void ns3::dsr::DsrRouting::ForwardPacket | ( | Ptr< const Packet > | packet, |
DsrOptionSRHeader & | sourceRoute, | ||
const Ipv4Header & | 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.
packet | The packet |
sourceRoute | Source route saved in option header |
ipv4Header | IPv4 Header |
source | source address |
destination | destination address |
targetAddress | target address |
protocol | protocol number |
route | route |
Definition at line 2857 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), ns3::dsr::DsrMaintainBuffer::Enqueue(), ns3::dsr::DsrMaintainBuffEntry::GetAckId(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), GetIDfromIP(), ns3::dsr::DsrOptionHeader::GetLength(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrOptionSRHeader::GetSegmentsLeft(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::Callback< R, UArgs >::IsNull(), ns3::dsr::NetworkKey::m_ackId, ns3::dsr::PassiveKey::m_ackId, m_ackId, m_addressForwardCnt, ns3::dsr::LinkKey::m_destination, ns3::dsr::NetworkKey::m_destination, ns3::dsr::PassiveKey::m_destination, m_downTarget, m_linkAck, m_linkCnt, m_mainAddress, m_maintainBuffer, m_maxMaintainTime, ns3::dsr::LinkKey::m_nextHop, ns3::dsr::NetworkKey::m_nextHop, ns3::dsr::LinkKey::m_ourAdd, ns3::dsr::NetworkKey::m_ourAdd, m_passiveCnt, ns3::dsr::PassiveKey::m_segsLeft, ns3::dsr::LinkKey::m_source, ns3::dsr::NetworkKey::m_source, ns3::dsr::PassiveKey::m_source, NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ScheduleLinkPacketRetry(), ScheduleNetworkPacketRetry(), SchedulePassivePacketRetry(), ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrFsHeader::SetPayloadLength(), and ns3::dsr::DsrFsHeader::SetSourceId().
|
overridevirtual |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case)
Implements ns3::IpL4Protocol.
Definition at line 3752 of file dsr-routing.cc.
References m_downTarget.
|
overridevirtual |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case)
Implements ns3::IpL4Protocol.
Definition at line 3758 of file dsr-routing.cc.
References NS_FATAL_ERROR.
std::vector< std::string > ns3::dsr::DsrRouting::GetElementsFromContext | ( | std::string | context | ) |
Get the elements from the tracing context.
context | context |
Definition at line 549 of file dsr-routing.cc.
Referenced by GetNetDeviceFromContext().
uint16_t ns3::dsr::DsrRouting::GetIDfromIP | ( | Ipv4Address | address | ) |
Get the node id from ip address.
address | IPv4 address |
Definition at line 810 of file dsr-routing.cc.
References ns3::NodeList::GetNNodes(), and ns3::NodeList::GetNode().
Referenced by CheckSendBuffer(), ForwardErrPacket(), ForwardPacket(), PacketNewRoute(), SalvagePacket(), Send(), SendAck(), SendErrorRequest(), SendGratuitousReply(), SendInitialRequest(), SendPacketFromBuffer(), and SendUnreachError().
Ipv4Address ns3::dsr::DsrRouting::GetIPfromID | ( | uint16_t | id | ) |
Get the ip address from id.
id | unique ID |
Definition at line 826 of file dsr-routing.cc.
References ns3::NodeList::GetNode(), and NS_LOG_DEBUG.
Referenced by PromiscReceive(), and Receive().
Ipv4Address ns3::dsr::DsrRouting::GetIPfromMAC | ( | Mac48Address | address | ) |
Get the Ip address from mac address.
address | Mac48Address |
Definition at line 719 of file dsr-routing.cc.
References ns3::NodeList::GetNNodes(), ns3::NodeList::GetNode(), and NS_LOG_FUNCTION.
Referenced by PromiscReceive().
Get the netdevice from the context.
context | context |
Definition at line 537 of file dsr-routing.cc.
References GetElementsFromContext(), ns3::NodeList::GetNode(), and NS_ASSERT.
Get the node.
Definition at line 597 of file dsr-routing.cc.
References m_node, and NS_LOG_FUNCTION_NOARGS.
Referenced by Receive().
Ptr< Node > ns3::dsr::DsrRouting::GetNodeWithAddress | ( | Ipv4Address | ipv4Address | ) |
Get the node with give ip address.
ipv4Address | IPv4 address |
Definition at line 646 of file dsr-routing.cc.
References ns3::NodeList::GetNNodes(), ns3::NodeList::GetNode(), and NS_LOG_FUNCTION.
Referenced by PromiscReceive().
Ptr< dsr::DsrOptions > ns3::dsr::DsrRouting::GetOption | ( | int | optionNumber | ) |
Get the option corresponding to optionNumber.
optionNumber | the option number of the option to retrieve |
Definition at line 3771 of file dsr-routing.cc.
References m_options.
Referenced by PromiscReceive(), and Receive().
Ptr< dsr::DsrPassiveBuffer > ns3::dsr::DsrRouting::GetPassiveBuffer | ( | ) | const |
Get the passive buffer.
Definition at line 639 of file dsr-routing.cc.
References m_passiveBuffer.
Referenced by GetTypeId().
uint32_t ns3::dsr::DsrRouting::GetPriority | ( | DsrMessageType | messageType | ) |
Set the priority of the packet in network queue.
messageType | Message type |
Definition at line 840 of file dsr-routing.cc.
References ns3::dsr::DSR_CONTROL_PACKET.
Referenced by CheckSendBuffer(), ForwardErrPacket(), IncreaseRetransTimer(), SalvagePacket(), SendAck(), SendPacket(), SendPacketFromBuffer(), SendReply(), SendRequest(), and SendUnreachError().
|
overridevirtual |
Get the dsr protocol number.
Implements ns3::IpL4Protocol.
Definition at line 803 of file dsr-routing.cc.
References PROT_NUMBER.
Referenced by SendRealDown().
Ptr< dsr::DsrRreqTable > ns3::dsr::DsrRouting::GetRequestTable | ( | ) | const |
Get the request table.
Definition at line 625 of file dsr-routing.cc.
References m_rreqTable.
Referenced by GetTypeId().
Ptr< dsr::DsrRouteCache > ns3::dsr::DsrRouting::GetRouteCache | ( | ) | const |
Get the route cache.
Definition at line 611 of file dsr-routing.cc.
References m_routeCache.
Referenced by GetTypeId().
|
static |
Get the type identificator.
Definition at line 116 of file dsr-routing.cc.
References GetPassiveBuffer(), GetRequestTable(), GetRouteCache(), m_blacklistTimeout, m_broadcastJitter, m_cacheType, m_discoveryHopLimit, m_dropTrace, m_graReplyTableSize, m_gratReplyHoldoff, m_initStability, m_linkAck, m_linkAckTimeout, m_maxCacheLen, m_maxCacheTime, m_maxEntriesEachDst, m_maxMaintainLen, m_maxMaintainTime, m_maxMaintRexmt, m_maxNetworkDelay, m_maxNetworkSize, m_maxRequestPeriod, m_maxRreqId, m_maxSalvageCount, m_maxSendBuffLen, m_minLifeTime, m_nodeTraversalTime, m_nonpropRequestTimeout, m_numPriorityQueues, m_passiveAckTimeout, m_requestPeriod, m_requestTableIds, m_requestTableSize, m_retransIncr, m_rreqRetries, m_sendBufferTimeout, m_sendBuffInterval, m_stabilityDecrFactor, m_stabilityIncrFactor, m_subRoute, m_tryLinkAcks, m_tryPassiveAcks, m_txPacketTrace, m_useExtends, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), ns3::MakePointerAccessor(), ns3::MakeStringAccessor(), ns3::MakeStringChecker(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeTraceSourceAccessor(), ns3::MakeUintegerAccessor(), ns3::MilliSeconds(), ns3::Seconds(), ns3::TypeId::SetParent(), SetPassiveBuffer(), SetRequestTable(), and SetRouteCache().
void ns3::dsr::DsrRouting::IncreaseRetransTimer | ( | ) |
This function is called to increase the retransmission timer for data packet in the network queue.
Definition at line 1851 of file dsr-routing.cc.
References ns3::dsr::DSR_DATA_PACKET, GetPriority(), m_addressForwardTimer, m_priorityQueue, m_retransIncr, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by PriorityScheduler().
void ns3::dsr::DsrRouting::Insert | ( | Ptr< dsr::DsrOptions > | option | ) |
Insert a new Dsr Option.
option | the option to insert |
Definition at line 3765 of file dsr-routing.cc.
References m_options.
Referenced by DsrRouting().
bool ns3::dsr::DsrRouting::IsLinkCache | ( | ) |
Checks if the link is cached in the route cache See also DsrRouteCache::IsLinkCache.
Definition at line 664 of file dsr-routing.cc.
References m_routeCache.
void ns3::dsr::DsrRouting::LinkScheduleTimerExpire | ( | DsrMaintainBuffEntry & | mb, |
uint8_t | protocol | ||
) |
This function deals with packet retransmission timer expire using link acknowledgment.
mb | maintenance buffer entry |
protocol | the protocol number |
Definition at line 2729 of file dsr-routing.cc.
References CancelPacketTimerNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::GetPacket(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::LinkKey::m_destination, m_linkAckTimer, m_linkCnt, m_linkRetries, m_mainAddress, ns3::dsr::LinkKey::m_nextHop, ns3::dsr::LinkKey::m_ourAdd, m_routeCache, ns3::dsr::LinkKey::m_source, m_tryLinkAcks, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, ScheduleLinkPacketRetry(), and SetRoute().
Referenced by ScheduleLinkPacketRetry().
bool ns3::dsr::DsrRouting::LookupRoute | ( | Ipv4Address | id, |
DsrRouteCacheEntry & | rt | ||
) |
Lookup route cache entry with destination address dst See also DsrRouteCache::LookupRoute.
id | destination address |
rt | entry with destination address id, if exists |
Definition at line 676 of file dsr-routing.cc.
References m_routeCache.
void ns3::dsr::DsrRouting::NetworkScheduleTimerExpire | ( | DsrMaintainBuffEntry & | mb, |
uint8_t | protocol | ||
) |
This function deals with packet retransmission timer expire using network acknowledgment.
mb | maintenance buffer entry |
protocol | the protocol number |
Definition at line 2821 of file dsr-routing.cc.
References CancelPacketTimerNextHop(), ns3::Packet::Copy(), ns3::dsr::DsrMaintainBuffEntry::GetAckId(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::GetPacket(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::NetworkKey::m_ackId, m_addressForwardCnt, ns3::dsr::NetworkKey::m_destination, m_mainAddress, m_maxMaintRexmt, ns3::dsr::NetworkKey::m_nextHop, ns3::dsr::NetworkKey::m_ourAdd, m_routeCache, m_sendRetries, ns3::dsr::NetworkKey::m_source, and ScheduleNetworkPacketRetry().
Referenced by ScheduleNetworkPacketRetry().
|
overrideprotectedvirtual |
Notify all Objects aggregated to this one of a new Object being aggregated.
This function must be implemented in the stack that needs to notify other stacks connected to the node of their presence in the node.
This method is invoked whenever two sets of Objects are aggregated together. It is invoked exactly once for each Object in both sets. This method can be overridden by subclasses who wish to be notified of aggregation events. These subclasses must chain up to their base class NotifyNewAggregate() method.
It is safe to call GetObject() and AggregateObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 406 of file dsr-routing.cc.
References m_ip, m_ipv4, m_node, ns3::MakeCallback(), ns3::Object::NotifyNewAggregate(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Simulator::ScheduleNow(), ns3::Ipv4L3Protocol::Send(), SetDownTarget(), SetNode(), and Start().
void ns3::dsr::DsrRouting::PacketNewRoute | ( | Ptr< Packet > | packet, |
Ipv4Address | source, | ||
Ipv4Address | destination, | ||
uint8_t | protocol | ||
) |
When route vector corrupted, originate a new packet, normally not happening.
packet | to route |
source | address |
destination | address |
protocol | number |
When found a route and use it, UseExtends to the link cache
Definition at line 1213 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), ns3::dsr::DsrMaintainBuffer::Enqueue(), ns3::dsr::DsrSendBuffer::Enqueue(), ns3::dsr::DsrMaintainBuffEntry::GetAckId(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), GetIDfromIP(), ns3::dsr::DsrOptionHeader::GetLength(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::DsrRouteCacheEntry::GetVector(), ns3::dsr::NetworkKey::m_ackId, ns3::dsr::PassiveKey::m_ackId, m_addressForwardCnt, m_addressReqTimer, ns3::dsr::LinkKey::m_destination, ns3::dsr::NetworkKey::m_destination, ns3::dsr::PassiveKey::m_destination, m_linkAck, m_linkCnt, m_mainAddress, m_maintainBuffer, m_maxMaintainTime, ns3::dsr::LinkKey::m_nextHop, ns3::dsr::NetworkKey::m_nextHop, m_nonPropReqTimer, ns3::dsr::LinkKey::m_ourAdd, ns3::dsr::NetworkKey::m_ourAdd, m_passiveCnt, m_routeCache, ns3::dsr::PassiveKey::m_segsLeft, m_sendBuffer, m_sendBufferTimeout, ns3::dsr::LinkKey::m_source, ns3::dsr::NetworkKey::m_source, ns3::dsr::PassiveKey::m_source, ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, PacketNewRoute(), ns3::Time::S, ScheduleLinkPacketRetry(), ScheduleNetworkPacketRetry(), SchedulePassivePacketRetry(), SearchNextHop(), SendInitialRequest(), ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrOptionSRHeader::SetNodesAddress(), ns3::dsr::DsrFsHeader::SetPayloadLength(), SetRoute(), ns3::dsr::DsrOptionSRHeader::SetSalvage(), ns3::dsr::DsrOptionSRHeader::SetSegmentsLeft(), and ns3::dsr::DsrFsHeader::SetSourceId().
Referenced by CheckSendBuffer(), PacketNewRoute(), RouteRequestTimerExpire(), SalvagePacket(), Send(), SendErrorRequest(), and SendUnreachError().
bool ns3::dsr::DsrRouting::PassiveEntryCheck | ( | Ptr< Packet > | packet, |
Ipv4Address | source, | ||
Ipv4Address | destination, | ||
uint8_t | segsLeft, | ||
uint16_t | fragmentOffset, | ||
uint16_t | identification, | ||
bool | saveEntry | ||
) |
Find the same passive entry.
packet | to process |
source | IP address |
destination | IP address |
segsLeft | segments left |
fragmentOffset | |
identification | |
saveEntry |
Save this passive buffer entry for later check
Definition at line 2134 of file dsr-routing.cc.
References CancelPassivePacketTimer(), m_passiveBuffer, NS_LOG_DEBUG, NS_LOG_FUNCTION, segsLeft, ns3::dsr::DsrMaintainBuffEntry::SetAckId(), ns3::dsr::DsrPassiveBuffEntry::SetDestination(), ns3::dsr::DsrMaintainBuffEntry::SetDst(), ns3::dsr::DsrPassiveBuffEntry::SetFragmentOffset(), ns3::dsr::DsrPassiveBuffEntry::SetIdentification(), ns3::dsr::DsrMaintainBuffEntry::SetPacket(), ns3::dsr::DsrPassiveBuffEntry::SetPacket(), ns3::dsr::DsrPassiveBuffEntry::SetSegsLeft(), ns3::dsr::DsrMaintainBuffEntry::SetSegsLeft(), ns3::dsr::DsrPassiveBuffEntry::SetSource(), and ns3::dsr::DsrMaintainBuffEntry::SetSrc().
void ns3::dsr::DsrRouting::PassiveScheduleTimerExpire | ( | DsrMaintainBuffEntry & | mb, |
uint8_t | protocol | ||
) |
This function deals with packet retransmission timer expire using passive acknowledgment.
mb | maintenance buffer entry |
protocol | the protocol number |
Definition at line 2774 of file dsr-routing.cc.
References CancelPassivePacketTimer(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetPacket(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::PassiveKey::m_ackId, ns3::dsr::PassiveKey::m_destination, m_mainAddress, m_passiveAckTimer, m_passiveCnt, m_passiveRetries, ns3::dsr::PassiveKey::m_segsLeft, ns3::dsr::PassiveKey::m_source, m_tryPassiveAcks, NS_LOG_DEBUG, NS_LOG_FUNCTION, ScheduleNetworkPacketRetry(), SchedulePassivePacketRetry(), and SetRoute().
Referenced by SchedulePassivePacketRetry().
void ns3::dsr::DsrRouting::PrintVector | ( | std::vector< Ipv4Address > & | vec | ) |
Print the route vector.
vec | the vector to print. |
Definition at line 738 of file dsr-routing.cc.
References NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by CancelPacketTimerNextHop().
void ns3::dsr::DsrRouting::PriorityScheduler | ( | uint32_t | priority, |
bool | continueWithFirst | ||
) |
This function is called to schedule sending packets from the network queue by priority.
priority | schedule |
continueWithFirst | use all priorities |
Definition at line 1770 of file dsr-routing.cc.
References ns3::UniformRandomVariable::GetInteger(), IncreaseRetransTimer(), m_numPriorityQueues, m_priorityQueue, m_uniformRandomVariable, ns3::MicroSeconds(), NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, PriorityScheduler(), ns3::Simulator::Schedule(), ns3::Seconds(), and SendRealDown().
Referenced by PriorityScheduler(), and Scheduler().
uint8_t ns3::dsr::DsrRouting::Process | ( | Ptr< Packet > & | packet, |
const Ipv4Header & | ipv4Header, | ||
Ipv4Address | dst, | ||
uint8_t * | nextHeader, | ||
uint8_t | protocol, | ||
bool & | isDropped | ||
) |
Process method Called from Ipv4L3Protocol::Receive.
packet | the packet |
ipv4Header | IPv4 header of the packet |
dst | destination address of the packet received (i.e. us) |
nextHeader | the next header |
protocol | the protocol number |
isDropped | if the packet must be dropped |
|
private |
Promiscuous receive data packets destined to some other node.
device | The network device |
packet | Data packet we just received |
protocol | The protocol we receive, need to verify it is dsr protocol |
from | The from address we received the packet |
to | The address this packet is destined for |
packetType | The dsr packet type, 0 is for control packet, 1 for data packet |
This is the ip address we just received data packet from
Remember this is the entry for previous node
Get the previous node's maintenance buffer and passive ack
Definition at line 1100 of file dsr-routing.cc.
References ns3::Mac48Address::ConvertFrom(), data, ns3::dsr::DsrFsHeader::GetDestId(), ns3::Ipv4Header::GetDestination(), ns3::dsr::DsrOptionField::GetDsrOptionsOffset(), GetIPfromID(), GetIPfromMAC(), ns3::dsr::DsrFsHeader::GetMessageType(), ns3::dsr::DsrFsHeader::GetNextHeader(), GetNodeWithAddress(), GetOption(), ns3::Ipv4Header::GetProtocol(), ns3::Ipv4Header::GetSource(), ns3::dsr::DsrFsHeader::GetSourceId(), m_ipv4, m_mainAddress, ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_INFO, ns3::NetDevice::PACKET_OTHERHOST, PROT_NUMBER, ns3::Ipv4L3Protocol::PROT_NUMBER, ns3::Time::S, ns3::dsr::DsrMaintainBuffEntry::SetDst(), ns3::dsr::DsrMaintainBuffEntry::SetNextHop(), ns3::dsr::DsrMaintainBuffEntry::SetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::SetPacket(), and ns3::dsr::DsrMaintainBuffEntry::SetSrc().
Referenced by Start().
|
overridevirtual |
p | packet to forward up |
header | IPv4 Header information |
incomingInterface | the Ipv4Interface on which the packet arrived |
Called from lower-level layers to send the packet up in the stack.
this is just here for the sake of passing in the promisc source
Implements ns3::IpL4Protocol.
Definition at line 3533 of file dsr-routing.cc.
References data, ns3::Ipv4Header::GetDestination(), ns3::dsr::DsrOptionField::GetDsrOptionsOffset(), GetIPfromID(), ns3::dsr::DsrFsHeader::GetNextHeader(), GetNode(), ns3::Object::GetObject(), GetOption(), ns3::Ipv4Header::GetSource(), ns3::dsr::DsrFsHeader::GetSourceId(), ns3::Ipv4Address::IsBroadcast(), ns3::Ipv4Address::IsMulticast(), m_dropTrace, m_mainAddress, m_node, m_rreqTable, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, ns3::IpL4Protocol::RX_CSUM_FAILED, ns3::IpL4Protocol::RX_ENDPOINT_CLOSED, ns3::IpL4Protocol::RX_ENDPOINT_UNREACH, ns3::IpL4Protocol::RX_OK, ns3::dsr::DsrOptionRerrUnsupportedHeader::SetErrorDst(), ns3::dsr::DsrOptionRerrUnsupportedHeader::SetErrorSrc(), ns3::dsr::DsrOptionRerrHeader::SetErrorType(), ns3::dsr::DsrOptionRerrUnsupportedHeader::SetSalvage(), and ns3::dsr::DsrOptionRerrUnsupportedHeader::SetUnsupported().
|
overridevirtual |
p | packet to forward up |
header | IPv6 Header information |
incomingInterface | the Ipv6Interface on which the packet arrived |
Called from lower-level layers to send the packet up in the stack. Not implemented (IPv6).
Implements ns3::IpL4Protocol.
Definition at line 3733 of file dsr-routing.cc.
References ns3::Ipv6Header::GetDestination(), ns3::Ipv6Header::GetSource(), NS_LOG_FUNCTION, and ns3::IpL4Protocol::RX_ENDPOINT_UNREACH.
void ns3::dsr::DsrRouting::RouteRequestTimerExpire | ( | Ptr< Packet > | packet, |
std::vector< Ipv4Address > | address, | ||
uint32_t | requestId, | ||
uint8_t | protocol | ||
) |
Handle route discovery timer.
packet | the original packet |
address | List of IPv4 addresses |
requestId | Unique request ID |
protocol | the protocol number |
Set the salvage value to 0
Try to send out data packet from the send buffer if found
Definition at line 3224 of file dsr-routing.cc.
References CancelRreqTimer(), ns3::dsr::DsrSendBuffer::DropPacketWithDst(), ns3::dsr::DsrSendBuffer::Find(), ns3::dsr::DsrSendBuffer::GetSize(), ns3::dsr::DsrRouteCacheEntry::GetVector(), m_discoveryHopLimit, m_mainAddress, m_routeCache, m_rreqRetries, m_rreqTable, m_sendBuffer, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, PacketNewRoute(), ScheduleRreqRetry(), SearchNextHop(), SendPacketFromBuffer(), SendRequest(), ns3::dsr::DsrOptionSRHeader::SetNodesAddress(), SetRoute(), ns3::dsr::DsrOptionSRHeader::SetSalvage(), ns3::dsr::DsrOptionSRHeader::SetSegmentsLeft(), and ns3::SocketIpTtlTag::SetTtl().
Referenced by ScheduleRreqRetry().
void ns3::dsr::DsrRouting::SalvagePacket | ( | Ptr< const Packet > | packet, |
Ipv4Address | source, | ||
Ipv4Address | dst, | ||
uint8_t | protocol | ||
) |
Salvage the packet which has been transmitted for 3 times.
packet | to process |
source | IP address |
dst | destination IP address |
protocol | number |
When found a route and use it, UseExtends to the link cache
Definition at line 2453 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), ns3::dsr::DSR_DATA_PACKET, ns3::dsr::DsrOptionField::GetDsrOptionsOffset(), GetIDfromIP(), ns3::dsr::DsrOptionHeader::GetLength(), GetPriority(), ns3::dsr::DsrOptionSRHeader::GetSalvage(), ns3::dsr::DsrRouteCacheEntry::GetVector(), m_ip, m_ipv4Route, m_mainAddress, m_maxSalvageCount, m_priorityQueue, m_routeCache, ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, PacketNewRoute(), SearchNextHop(), ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrOptionSRHeader::SetNodesAddress(), ns3::dsr::DsrOptionSRHeader::SetNumberAddress(), ns3::dsr::DsrFsHeader::SetPayloadLength(), SetRoute(), ns3::dsr::DsrOptionSRHeader::SetSalvage(), ns3::dsr::DsrOptionSRHeader::SetSegmentsLeft(), and ns3::dsr::DsrFsHeader::SetSourceId().
Referenced by CancelPacketTimerNextHop().
void ns3::dsr::DsrRouting::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.
packet | the original packet |
source | IPv4 address of the source (i.e. request originator) |
destination | IPv4 address of the destination |
route | Route |
hops | number of hops |
Definition at line 3458 of file dsr-routing.cc.
References ns3::UniformRandomVariable::GetValue(), m_nodeTraversalTime, m_uniformRandomVariable, NS_LOG_FUNCTION, ns3::Simulator::Schedule(), and SendReply().
void ns3::dsr::DsrRouting::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, m_broadcastJitter] is used before unicasting back the route reply packet
packet | the original packet |
source | IPv4 address of the source (i.e. request originator) |
nextHop | IPv4 address of the next hop |
route | Route |
Definition at line 3448 of file dsr-routing.cc.
References NS_LOG_FUNCTION, ns3::Simulator::ScheduleNow(), and SendReply().
Schedule the intermediate route request.
packet | the original packet |
Definition at line 3331 of file dsr-routing.cc.
References ns3::UniformRandomVariable::GetInteger(), m_broadcastJitter, m_mainAddress, m_uniformRandomVariable, ns3::MilliSeconds(), NS_LOG_FUNCTION, ns3::Simulator::Schedule(), and SendRequest().
void ns3::dsr::DsrRouting::ScheduleLinkPacketRetry | ( | DsrMaintainBuffEntry & | mb, |
uint8_t | protocol | ||
) |
Schedule the packet retransmission based on link-layer acknowledgment.
mb | maintenance buffer entry |
protocol | the protocol number |
Definition at line 2558 of file dsr-routing.cc.
References ns3::Timer::CANCEL_ON_DESTROY, ns3::Packet::Copy(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::GetPacket(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), LinkScheduleTimerExpire(), ns3::dsr::LinkKey::m_destination, m_linkAckTimeout, m_linkAckTimer, ns3::dsr::LinkKey::m_nextHop, ns3::dsr::LinkKey::m_ourAdd, ns3::dsr::LinkKey::m_source, NS_LOG_FUNCTION, and SendPacket().
Referenced by CheckSendBuffer(), ForwardPacket(), LinkScheduleTimerExpire(), PacketNewRoute(), Send(), and SendPacketFromBuffer().
void ns3::dsr::DsrRouting::ScheduleNetworkPacketRetry | ( | DsrMaintainBuffEntry & | mb, |
bool | isFirst, | ||
uint8_t | protocol | ||
) |
Schedule the packet retransmission based on network layer acknowledgment.
mb | maintenance buffer entry |
isFirst | see if this is the first packet retry or not |
protocol | the protocol number |
Definition at line 2617 of file dsr-routing.cc.
References AddAckReqHeader(), ns3::dsr::DsrMaintainBuffer::AllEqual(), ns3::Timer::CANCEL_ON_DESTROY, ns3::Packet::Copy(), ns3::dsr::DsrMaintainBuffer::Enqueue(), ns3::dsr::DsrMaintainBuffEntry::GetAckId(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::GetPacket(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::NetworkKey::m_ackId, m_addressForwardCnt, m_addressForwardTimer, ns3::dsr::NetworkKey::m_destination, m_maintainBuffer, m_maxMaintainTime, ns3::dsr::NetworkKey::m_nextHop, m_nodeTraversalTime, ns3::dsr::NetworkKey::m_ourAdd, m_sendRetries, ns3::dsr::NetworkKey::m_source, NetworkScheduleTimerExpire(), NS_LOG_DEBUG, NS_LOG_ERROR, ns3::Time::S, SendPacket(), ns3::dsr::DsrMaintainBuffEntry::SetAckId(), ns3::dsr::DsrMaintainBuffEntry::SetExpireTime(), and ns3::dsr::DsrMaintainBuffEntry::SetPacket().
Referenced by CheckSendBuffer(), ForwardPacket(), NetworkScheduleTimerExpire(), PacketNewRoute(), PassiveScheduleTimerExpire(), Send(), and SendPacketFromBuffer().
void ns3::dsr::DsrRouting::SchedulePassivePacketRetry | ( | DsrMaintainBuffEntry & | mb, |
uint8_t | protocol | ||
) |
Schedule the packet retransmission based on passive acknowledgment.
mb | maintenance buffer entry |
protocol | the protocol number |
Definition at line 2587 of file dsr-routing.cc.
References ns3::Timer::CANCEL_ON_DESTROY, ns3::Packet::Copy(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetPacket(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::PassiveKey::m_ackId, ns3::dsr::PassiveKey::m_destination, m_passiveAckTimeout, m_passiveAckTimer, ns3::dsr::PassiveKey::m_segsLeft, ns3::dsr::PassiveKey::m_source, NS_LOG_DEBUG, NS_LOG_FUNCTION, PassiveScheduleTimerExpire(), and SendPacket().
Referenced by CheckSendBuffer(), ForwardPacket(), PacketNewRoute(), PassiveScheduleTimerExpire(), Send(), and SendPacketFromBuffer().
void ns3::dsr::DsrRouting::Scheduler | ( | uint32_t | priority | ) |
This function is called to schedule sending packets from the network queue.
priority | for sending |
Definition at line 1763 of file dsr-routing.cc.
References NS_LOG_FUNCTION, and PriorityScheduler().
void ns3::dsr::DsrRouting::ScheduleRreqRetry | ( | Ptr< Packet > | packet, |
std::vector< Ipv4Address > | address, | ||
bool | nonProp, | ||
uint32_t | requestId, | ||
uint8_t | protocol | ||
) |
Schedule the route request retry.
packet | the original packet |
address | List of IPv4 addresses |
nonProp | flag if RREQ is non-propagating |
requestId | Unique request ID |
protocol | the protocol number |
Definition at line 3147 of file dsr-routing.cc.
References ns3::Time::As(), ns3::Timer::CANCEL_ON_DESTROY, m_addressReqTimer, m_maxRequestPeriod, m_nonPropReqTimer, m_nonpropRequestTimeout, m_requestPeriod, m_rreqTable, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC, RouteRequestTimerExpire(), and ns3::Time::S.
Referenced by RouteRequestTimerExpire(), SendErrorRequest(), and SendInitialRequest().
Ipv4Address ns3::dsr::DsrRouting::SearchNextHop | ( | Ipv4Address | ipv4Address, |
std::vector< Ipv4Address > & | vec | ||
) |
Get the next hop of the route.
ipv4Address | |
vec | Route |
Definition at line 759 of file dsr-routing.cc.
References NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by AddRoute(), AddRoute_Link(), CheckSendBuffer(), PacketNewRoute(), RouteRequestTimerExpire(), SalvagePacket(), Send(), SendErrorRequest(), and SendUnreachError().
void ns3::dsr::DsrRouting::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.
packet | to send |
source | IP address |
destination | IP address |
protocol | number |
route | IP route |
When found a route and use it, UseExtends to the link cache
Definition at line 1525 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), ns3::dsr::DsrMaintainBuffer::Enqueue(), ns3::dsr::DsrSendBuffer::Enqueue(), ns3::dsr::DsrSendBuffer::Find(), ns3::dsr::DsrMaintainBuffEntry::GetAckId(), ns3::dsr::DsrMaintainBuffEntry::GetDst(), GetIDfromIP(), ns3::UniformRandomVariable::GetInteger(), ns3::dsr::DsrOptionHeader::GetLength(), ns3::dsr::DsrMaintainBuffEntry::GetNextHop(), ns3::dsr::DsrMaintainBuffEntry::GetOurAdd(), ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft(), ns3::dsr::DsrSendBuffer::GetSize(), ns3::dsr::DsrMaintainBuffEntry::GetSrc(), ns3::dsr::DsrRouteCacheEntry::GetVector(), ns3::Callback< R, UArgs >::IsNull(), ns3::dsr::NetworkKey::m_ackId, ns3::dsr::PassiveKey::m_ackId, m_addressForwardCnt, m_addressReqTimer, ns3::dsr::LinkKey::m_destination, ns3::dsr::NetworkKey::m_destination, ns3::dsr::PassiveKey::m_destination, m_downTarget, m_linkAck, m_linkCnt, m_mainAddress, m_maintainBuffer, m_maxMaintainTime, ns3::dsr::LinkKey::m_nextHop, ns3::dsr::NetworkKey::m_nextHop, m_nonPropReqTimer, ns3::dsr::LinkKey::m_ourAdd, ns3::dsr::NetworkKey::m_ourAdd, m_passiveCnt, m_routeCache, m_rreqTable, ns3::dsr::PassiveKey::m_segsLeft, m_sendBuffer, m_sendBufferTimeout, ns3::dsr::LinkKey::m_source, ns3::dsr::NetworkKey::m_source, ns3::dsr::PassiveKey::m_source, m_uniformRandomVariable, ns3::MilliSeconds(), ns3::Simulator::Now(), NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, PacketNewRoute(), ns3::Time::S, ns3::Simulator::Schedule(), ScheduleLinkPacketRetry(), ScheduleNetworkPacketRetry(), SchedulePassivePacketRetry(), SearchNextHop(), SendInitialRequest(), SendPacketFromBuffer(), ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrOptionSRHeader::SetNodesAddress(), ns3::dsr::DsrFsHeader::SetPayloadLength(), ns3::dsr::DsrOptionSRHeader::SetSalvage(), ns3::dsr::DsrOptionSRHeader::SetSegmentsLeft(), and ns3::dsr::DsrFsHeader::SetSourceId().
Referenced by ns3::DsrHelper::Create().
void ns3::dsr::DsrRouting::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.
ackId | ACK ID |
destination | IPv4 address of the immediate ACK receiver |
realSrc | IPv4 address of the real source |
realDst | IPv4 address of the real destination |
protocol | the protocol number |
route | Route |
Definition at line 3476 of file dsr-routing.cc.
References ns3::dsr::DsrOptionField::AddDsrOption(), ns3::dsr::DSR_CONTROL_PACKET, GetIDfromIP(), ns3::dsr::DsrOptionHeader::GetLength(), GetPriority(), ns3::Callback< R, UArgs >::IsNull(), m_downTarget, m_ip, m_mainAddress, m_priorityQueue, ns3::Simulator::Now(), NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, ns3::dsr::DsrOptionAckHeader::SetAckId(), ns3::dsr::DsrFsHeader::SetDestId(), ns3::dsr::DsrFsHeader::SetMessageType(), ns3::dsr::DsrFsHeader::SetNextHeader(), ns3::dsr::DsrFsHeader::SetPayloadLength(), ns3::dsr::DsrOptionAckHeader::SetRealDst(), ns3::dsr::DsrOptionAckHeader::SetRealSrc(), and ns3::dsr::DsrFsHeader::SetSourceId().