33 #ifndef DSDV_ROUTING_PROTOCOL_H 34 #define DSDV_ROUTING_PROTOCOL_H 40 #include "ns3/random-variable-stream.h" 41 #include "ns3/ipv4-routing-protocol.h" 42 #include "ns3/ipv4-interface.h" 43 #include "ns3/ipv4-l3-protocol.h" 44 #include "ns3/output-stream-wrapper.h" void Start()
Start protocol operation.
Ptr< Ipv4Route > LoopbackRoute(const Ipv4Header &header, Ptr< NetDevice > oif) const
Create loopback route for given header.
static const uint32_t DSDV_PORT
UDP Port for DSDV control traffic.
Simulation virtual time values and global simulation resolution.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
std::map< Ptr< Socket >, Ipv4InterfaceAddress > m_socketAddresses
Raw socket per each IP interface, map socket -> iface address (IP + mask)
bool EnableRouteAggregation
This is a flag to enable route aggregation.
void MergeTriggerPeriodicUpdates()
Merge periodic updates.
Time m_periodicUpdateInterval
PeriodicUpdateInterval specifies the periodic time interval between which the a node broadcasts its e...
bool EnableBuffering
Flag that is used to enable or disable buffering.
ErrorCallback m_ecb
Error callback for own packets.
virtual void SetIpv4(Ptr< Ipv4 > ipv4)
bool EnableWST
Flag that is used to enable or disable Weighted Settling Time.
virtual void DoDispose()
Destructor implementation.
virtual void NotifyInterfaceDown(uint32_t interface)
double m_weightedFactor
This is the wighted factor to determine the weighted settling time.
SocketErrno
Enumeration of the possible errors returned by a socket.
void SendPacketFromQueue(Ipv4Address dst, Ptr< Ipv4Route > route)
Send packet from queue.
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const
Print the Routing Table entries.
void SendPeriodicUpdate()
Broadcasts the entire routing table for every PeriodicUpdateInterval.
Ptr< Socket > FindSocketWithInterfaceAddress(Ipv4InterfaceAddress iface) const
Find socket with local interface address iface.
The Routing table used by DSDV protocol.
bool GetEnableRAFlag() const
Get enable route aggregation (RA) flag.
Unit
The unit to use to interpret a number representing time.
uint32_t m_maxQueueLen
The maximum number of packets that we allow a routing protocol to buffer.
bool RouteInput(Ptr< const Packet > p, const Ipv4Header &header, Ptr< const NetDevice > idev, UnicastForwardCallback ucb, MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb)
Route input packet.
virtual void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address)
static TypeId GetTypeId(void)
Get the type ID.
UnicastForwardCallback m_scb
Unicast callback for own packets.
double f(double x, void *params)
Ptr< Ipv4Route > RouteOutput(Ptr< Packet > p, const Ipv4Header &header, Ptr< NetDevice > oif, Socket::SocketErrno &sockerr)
Query routing cache for an existing route, for an outbound packet.
virtual ~RoutingProtocol()
Time GetSettlingTime(Ipv4Address dst)
Get settlingTime for a destination.
void DeferredRouteOutput(Ptr< const Packet > p, const Ipv4Header &header, UnicastForwardCallback ucb, ErrorCallback ecb)
Queue packet until we find a route.
void LookForQueuedPackets(void)
Look for any queued packets to send them out.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Time m_routeAggregationTime
Parameter that holds the route aggregation time interval.
Timer m_triggeredExpireTimer
Timer used by the trigger updates in case of Weighted Settling Time is used.
PacketQueue m_queue
A "drop front on full" queue used by the routing layer to buffer packets to which it does not have a ...
Time m_maxQueueTime
The maximum period of time that a routing protocol is allowed to buffer a packet for.
void RecvDsdv(Ptr< Socket > socket)
Receive and process dsdv control packet.
Ipv4Address m_mainAddress
Nodes IP address.
bool GetWSTFlag() const
Get weighted settling time (WST) flag.
void SendTriggeredUpdate()
Sends trigger update from a node.
uint32_t m_maxQueuedPacketsPerDst
The maximum number of packets that we allow per destination to buffer.
virtual void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address)
void Send(Ptr< Ipv4Route >, Ptr< const Packet >, const Ipv4Header &)
Send packet.
Ipv4 addresses are stored in host order in this class.
a class to store IPv4 address information on an interface
void SetEnableRAFlag(bool f)
Set enable route aggregation (RA) flag.
Ptr< NetDevice > m_lo
Loopback device used to defer route requests until a route is found.
Ptr< UniformRandomVariable > m_uniformRandomVariable
Provides uniform random variables.
bool GetEnableBufferFlag() const
Get enable buffer flag.
void SetEnableBufferFlag(bool f)
Set enable buffer flag.
Abstract base class for IPv4 routing protocols.
Ptr< Ipv4 > m_ipv4
IP protocol.
RoutingTable m_advRoutingTable
Advertised Routing table for the node.
virtual void NotifyInterfaceUp(uint32_t interface)
Timer m_periodicUpdateTimer
Timer to trigger periodic updates from a node.
void SetWSTFlag(bool f)
Set weighted settling time (WST) flag.
RoutingTable m_routingTable
Main Routing table for the node.
void Drop(Ptr< const Packet >, const Ipv4Header &, Socket::SocketErrno)
Notify that packet is dropped for some reason.
a unique identifier for an interface.
Time m_settlingTime
SettlingTime specifies the time for which a node waits before propagating an update.
Callback< void, Ptr< Ipv4Route >, Ptr< const Packet >, const Ipv4Header & > UnicastForwardCallback
Callback for unicast packets to be forwarded.
uint32_t Holdtimes
Holdtimes is the multiplicative factor of PeriodicUpdateInterval for which the node waits since the l...