DSDV routing protocol. More...
#include "dsdv-routing-protocol.h"
Public Member Functions | |
RoutingProtocol () | |
c-tor More... | |
~RoutingProtocol () override | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. More... | |
void | DoDispose () override |
Destructor implementation. More... | |
bool | GetEnableBufferFlag () const |
Get enable buffer flag. More... | |
bool | GetEnableRAFlag () const |
Get enable route aggregation (RA) flag. More... | |
bool | GetWSTFlag () const |
Get weighted settling time (WST) flag. More... | |
void | NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address) override |
void | NotifyInterfaceDown (uint32_t interface) override |
void | NotifyInterfaceUp (uint32_t interface) override |
void | NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address) override |
void | PrintRoutingTable (Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const override |
Print the Routing Table entries. More... | |
bool | RouteInput (Ptr< const Packet > p, const Ipv4Header &header, Ptr< const NetDevice > idev, const UnicastForwardCallback &ucb, const MulticastForwardCallback &mcb, const LocalDeliverCallback &lcb, const ErrorCallback &ecb) override |
Route input packet. More... | |
Ptr< Ipv4Route > | RouteOutput (Ptr< Packet > p, const Ipv4Header &header, Ptr< NetDevice > oif, Socket::SocketErrno &sockerr) override |
Query routing cache for an existing route, for an outbound packet. More... | |
void | SetEnableBufferFlag (bool f) |
Set enable buffer flag. More... | |
void | SetEnableRAFlag (bool f) |
Set enable route aggregation (RA) flag. More... | |
void | SetIpv4 (Ptr< Ipv4 > ipv4) override |
void | SetWSTFlag (bool f) |
Set weighted settling time (WST) flag. More... | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. More... | |
~Object () override | |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose () |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. More... | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. More... | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. More... | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. More... | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized () const |
Check if the object has been initialized. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. More... | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. More... | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. More... | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. More... | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. More... | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. More... | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. More... | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. More... | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. More... | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Ipv4RoutingProtocol | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. More... | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Attributes | |
static const uint32_t | DSDV_PORT = 269 |
UDP Port for DSDV control traffic. More... | |
Private Member Functions | |
void | DeferredRouteOutput (Ptr< const Packet > p, const Ipv4Header &header, UnicastForwardCallback ucb, ErrorCallback ecb) |
Queue packet until we find a route. More... | |
void | Drop (Ptr< const Packet > packet, const Ipv4Header &header, Socket::SocketErrno err) |
Notify that packet is dropped for some reason. More... | |
Ptr< Socket > | FindSocketWithInterfaceAddress (Ipv4InterfaceAddress iface) const |
Find socket with local interface address iface. More... | |
Time | GetSettlingTime (Ipv4Address dst) |
Get settlingTime for a destination. More... | |
void | LookForQueuedPackets () |
Look for any queued packets to send them out. More... | |
Ptr< Ipv4Route > | LoopbackRoute (const Ipv4Header &header, Ptr< NetDevice > oif) const |
Create loopback route for given header. More... | |
void | MergeTriggerPeriodicUpdates () |
Merge periodic updates. More... | |
void | RecvDsdv (Ptr< Socket > socket) |
Receive and process dsdv control packet. More... | |
void | Send (Ptr< Ipv4Route > route, Ptr< const Packet > packet, const Ipv4Header &header) |
Send a packet. More... | |
void | SendPacketFromQueue (Ipv4Address dst, Ptr< Ipv4Route > route) |
Send packet from queue. More... | |
void | SendPeriodicUpdate () |
Broadcasts the entire routing table for every PeriodicUpdateInterval. More... | |
void | SendTriggeredUpdate () |
Sends trigger update from a node. More... | |
void | Start () |
Start protocol operation. More... | |
Private Attributes | |
bool | EnableBuffering |
Flag that is used to enable or disable buffering. More... | |
bool | EnableRouteAggregation |
This is a flag to enable route aggregation. More... | |
bool | EnableWST |
Flag that is used to enable or disable Weighted Settling Time. More... | |
uint32_t | Holdtimes |
Holdtimes is the multiplicative factor of PeriodicUpdateInterval for which the node waits since the last update before flushing a route from the routing table. More... | |
RoutingTable | m_advRoutingTable |
Advertised Routing table for the node. More... | |
ErrorCallback | m_ecb |
Error callback for own packets. More... | |
Ptr< Ipv4 > | m_ipv4 |
IP protocol. More... | |
Ptr< NetDevice > | m_lo |
Loopback device used to defer route requests until a route is found. More... | |
Ipv4Address | m_mainAddress |
Nodes IP address. More... | |
uint32_t | m_maxQueuedPacketsPerDst |
The maximum number of packets that we allow per destination to buffer. More... | |
uint32_t | m_maxQueueLen |
The maximum number of packets that we allow a routing protocol to buffer. More... | |
Time | m_maxQueueTime |
The maximum period of time that a routing protocol is allowed to buffer a packet for. More... | |
Time | m_periodicUpdateInterval |
PeriodicUpdateInterval specifies the periodic time interval between which the a node broadcasts its entire routing table. More... | |
Timer | m_periodicUpdateTimer |
Timer to trigger periodic updates from a node. More... | |
PacketQueue | m_queue |
A "drop front on full" queue used by the routing layer to buffer packets to which it does not have a route. More... | |
Time | m_routeAggregationTime |
Parameter that holds the route aggregation time interval. More... | |
RoutingTable | m_routingTable |
Main Routing table for the node. More... | |
UnicastForwardCallback | m_scb |
Unicast callback for own packets. More... | |
Time | m_settlingTime |
SettlingTime specifies the time for which a node waits before propagating an update. More... | |
std::map< Ptr< Socket >, Ipv4InterfaceAddress > | m_socketAddresses |
Raw socket per each IP interface, map socket -> iface address (IP + mask) More... | |
Timer | m_triggeredExpireTimer |
Timer used by the trigger updates in case of Weighted Settling Time is used. More... | |
Ptr< UniformRandomVariable > | m_uniformRandomVariable |
Provides uniform random variables. More... | |
double | m_weightedFactor |
This is the weighted factor to determine the weighted settling time. More... | |
Additional Inherited Members | |
Public Types inherited from ns3::Ipv4RoutingProtocol | |
typedef Callback< void, Ptr< const Packet >, const Ipv4Header &, Socket::SocketErrno > | ErrorCallback |
Callback for routing errors (e.g., no route found) More... | |
typedef Callback< void, Ptr< const Packet >, const Ipv4Header &, uint32_t > | LocalDeliverCallback |
Callback for packets to be locally delivered. More... | |
typedef Callback< void, Ptr< Ipv4MulticastRoute >, Ptr< const Packet >, const Ipv4Header & > | MulticastForwardCallback |
Callback for multicast packets to be forwarded. More... | |
typedef Callback< void, Ptr< Ipv4Route >, Ptr< const Packet >, const Ipv4Header & > | UnicastForwardCallback |
Callback for unicast packets to be forwarded. More... | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoInitialize () |
Initialize() implementation. More... | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. More... | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. More... | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
DSDV routing protocol.
Definition at line 55 of file dsdv-routing-protocol.h.
ns3::dsdv::RoutingProtocol::RoutingProtocol | ( | ) |
|
override |
Definition at line 236 of file dsdv-routing-protocol.cc.
int64_t ns3::dsdv::RoutingProtocol::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 220 of file dsdv-routing-protocol.cc.
References m_uniformRandomVariable, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
|
private |
Queue packet until we find a route.
p | the packet to route |
header | the Ipv4Header |
ucb | the UnicastForwardCallback function |
ecb | the ErrorCallback function |
Definition at line 371 of file dsdv-routing-protocol.cc.
References ns3::dsdv::PacketQueue::Enqueue(), ns3::Packet::GetUid(), m_queue, NS_ASSERT, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by RouteInput().
|
overridevirtual |
Destructor implementation.
This method is called by Dispose() or by the Object's destructor, whichever comes first.
Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.
It is safe to call GetObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 241 of file dsdv-routing-protocol.cc.
References ns3::Object::DoDispose(), m_ipv4, and m_socketAddresses.
|
private |
Notify that packet is dropped for some reason.
packet | the dropped packet |
header | the IPv4 header |
err | the error number |
Definition at line 1142 of file dsdv-routing-protocol.cc.
References ns3::Ipv4Header::GetDestination(), ns3::Packet::GetUid(), m_mainAddress, and NS_LOG_DEBUG.
Referenced by Start().
|
private |
Find socket with local interface address iface.
iface | the interface |
Definition at line 1117 of file dsdv-routing-protocol.cc.
References m_socketAddresses.
Referenced by NotifyAddAddress(), NotifyInterfaceDown(), and NotifyRemoveAddress().
bool ns3::dsdv::RoutingProtocol::GetEnableBufferFlag | ( | ) | const |
Get enable buffer flag.
Definition at line 190 of file dsdv-routing-protocol.cc.
References EnableBuffering.
Referenced by GetTypeId().
bool ns3::dsdv::RoutingProtocol::GetEnableRAFlag | ( | ) | const |
Get enable route aggregation (RA) flag.
Definition at line 214 of file dsdv-routing-protocol.cc.
References EnableRouteAggregation.
Referenced by GetTypeId().
|
private |
Get settlingTime for a destination.
dst | - destination address |
Definition at line 1219 of file dsdv-routing-protocol.cc.
References first::address, ns3::Time::As(), EnableWST, ns3::dsdv::RoutingTableEntry::GetLifeTime(), ns3::dsdv::RoutingTableEntry::GetSettlingTime(), ns3::dsdv::RoutingTable::LookupRoute(), m_routingTable, m_weightedFactor, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Time::S, and ns3::Seconds().
Referenced by RecvDsdv().
|
static |
Get the type ID.
Definition at line 112 of file dsdv-routing-protocol.cc.
References GetEnableBufferFlag(), GetEnableRAFlag(), GetWSTFlag(), Holdtimes, m_maxQueuedPacketsPerDst, m_maxQueueLen, m_maxQueueTime, m_periodicUpdateInterval, m_routeAggregationTime, m_settlingTime, m_weightedFactor, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), ns3::MakeDoubleAccessor(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeUintegerAccessor(), ns3::Seconds(), SetEnableBufferFlag(), SetEnableRAFlag(), ns3::TypeId::SetParent(), and SetWSTFlag().
bool ns3::dsdv::RoutingProtocol::GetWSTFlag | ( | ) | const |
Get weighted settling time (WST) flag.
Definition at line 202 of file dsdv-routing-protocol.cc.
References EnableWST.
Referenced by GetTypeId().
|
private |
Look for any queued packets to send them out.
Definition at line 1149 of file dsdv-routing-protocol.cc.
References ns3::dsdv::PacketQueue::Find(), ns3::dsdv::RoutingTableEntry::GetDestination(), ns3::dsdv::RoutingTableEntry::GetHop(), ns3::dsdv::RoutingTable::GetListOfAllRoutes(), ns3::dsdv::RoutingTableEntry::GetNextHop(), ns3::dsdv::RoutingTableEntry::GetRoute(), ns3::dsdv::RoutingTable::LookupRoute(), m_queue, m_routingTable, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_LOGIC, and SendPacketFromQueue().
Referenced by RouteOutput().
|
private |
Create loopback route for given header.
header | the IP header |
oif | the device |
Definition at line 518 of file dsdv-routing-protocol.cc.
References ns3::Ipv4Header::GetDestination(), m_ipv4, m_lo, m_socketAddresses, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by RouteOutput().
|
private |
Merge periodic updates.
Definition at line 1246 of file dsdv-routing-protocol.cc.
References ns3::dsdv::RoutingTable::AnyRunningEvent(), ns3::dsdv::RoutingTable::DeleteRoute(), ns3::dsdv::RoutingTableEntry::GetDestination(), ns3::dsdv::RoutingTableEntry::GetEntriesChanged(), ns3::dsdv::RoutingTable::GetListOfAllRoutes(), ns3::dsdv::RoutingTableEntry::GetSeqNo(), m_advRoutingTable, m_routingTable, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::dsdv::RoutingTableEntry::SetEntriesChanged(), ns3::dsdv::RoutingTableEntry::SetFlag(), ns3::dsdv::RoutingTable::Update(), and ns3::dsdv::VALID.
Referenced by SendPeriodicUpdate().
|
overridevirtual |
interface | the index of the interface we are being notified about |
address | a new address being added to an interface |
Protocols are expected to implement this method to be notified whenever a new address is added to an interface. Typically used to add a 'network route' on an interface. Can be invoked on an up or down interface.
Implements ns3::Ipv4RoutingProtocol.
Definition at line 1056 of file dsdv-routing-protocol.cc.
References first::address, ns3::dsdv::RoutingTable::AddRoute(), ns3::Socket::Bind(), ns3::Socket::BindToNetDevice(), ns3::Socket::CreateSocket(), DSDV_PORT, FindSocketWithInterfaceAddress(), ns3::Ipv4Address::GetAny(), ns3::Ipv4InterfaceAddress::GetBroadcast(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Simulator::GetMaximumSimulationTime(), ns3::UdpSocketFactory::GetTypeId(), m_ipv4, m_routingTable, m_socketAddresses, ns3::MakeCallback(), NS_ASSERT, NS_LOG_FUNCTION, RecvDsdv(), ns3::Socket::SetAllowBroadcast(), and ns3::Socket::SetRecvCallback().
|
overridevirtual |
interface | the index of the interface we are being notified about |
Protocols are expected to implement this method to be notified of the state change of an interface in a node.
Implements ns3::Ipv4RoutingProtocol.
Definition at line 1037 of file dsdv-routing-protocol.cc.
References ns3::dsdv::RoutingTable::Clear(), ns3::Socket::Close(), ns3::dsdv::RoutingTable::DeleteAllRoutesFromInterface(), FindSocketWithInterfaceAddress(), m_advRoutingTable, m_ipv4, m_routingTable, m_socketAddresses, NS_ASSERT, and NS_LOG_LOGIC.
|
overridevirtual |
interface | the index of the interface we are being notified about |
Protocols are expected to implement this method to be notified of the state change of an interface in a node.
Implements ns3::Ipv4RoutingProtocol.
Definition at line 1001 of file dsdv-routing-protocol.cc.
References ns3::dsdv::RoutingTable::AddRoute(), ns3::Socket::Bind(), ns3::Socket::BindToNetDevice(), ns3::Socket::CreateSocket(), DSDV_PORT, ns3::Ipv4Address::GetAny(), ns3::Simulator::GetMaximumSimulationTime(), ns3::UdpSocketFactory::GetTypeId(), m_ipv4, m_mainAddress, m_routingTable, m_socketAddresses, ns3::MakeCallback(), NS_ASSERT, NS_LOG_FUNCTION, RecvDsdv(), ns3::Socket::SetAllowBroadcast(), ns3::ObjectBase::SetAttribute(), and ns3::Socket::SetRecvCallback().
|
overridevirtual |
interface | the index of the interface we are being notified about |
address | a new address being added to an interface |
Protocols are expected to implement this method to be notified whenever a new address is removed from an interface. Typically used to remove the 'network route' of an interface. Can be invoked on an up or down interface.
Implements ns3::Ipv4RoutingProtocol.
Definition at line 1093 of file dsdv-routing-protocol.cc.
References first::address, ns3::Socket::Bind(), ns3::Socket::CreateSocket(), DSDV_PORT, FindSocketWithInterfaceAddress(), ns3::Ipv4Address::GetAny(), ns3::UdpSocketFactory::GetTypeId(), m_ipv4, m_socketAddresses, ns3::MakeCallback(), NS_ASSERT, RecvDsdv(), ns3::Socket::SetAllowBroadcast(), and ns3::Socket::SetRecvCallback().
|
overridevirtual |
Print the Routing Table entries.
stream | The ostream the Routing table is printed to |
unit | The time unit to be used in the report |
Implements ns3::Ipv4RoutingProtocol.
Definition at line 253 of file dsdv-routing-protocol.cc.
References ns3::Time::As(), ns3::OutputStreamWrapper::GetStream(), m_ipv4, m_routingTable, ns3::Now(), and ns3::dsdv::RoutingTable::Print().
Receive and process dsdv control packet.
socket | the socket for receiving dsdv control packets |
Definition at line 566 of file dsdv-routing-protocol.cc.
References ns3::dsdv::RoutingTable::AddIpv4Event(), ns3::dsdv::RoutingTable::AddRoute(), ns3::dsdv::RoutingTable::AnyRunningEvent(), ns3::Time::As(), ns3::InetSocketAddress::ConvertFrom(), ns3::dsdv::RoutingTable::DeleteRoute(), EnableRouteAggregation, ns3::dsdv::RoutingTable::ForceDeleteIpv4Event(), ns3::Timer::GetDelayLeft(), ns3::dsdv::DsdvHeader::GetDst(), ns3::dsdv::DsdvHeader::GetDstSeqno(), ns3::dsdv::RoutingTableEntry::GetHop(), ns3::dsdv::DsdvHeader::GetHopCount(), ns3::UniformRandomVariable::GetInteger(), ns3::InetSocketAddress::GetIpv4(), ns3::dsdv::RoutingTable::GetListOfAllRoutes(), ns3::dsdv::RoutingTable::GetListOfDestinationWithNextHop(), ns3::dsdv::RoutingTableEntry::GetNextHop(), ns3::dsdv::RoutingTableEntry::GetSeqNo(), GetSettlingTime(), ns3::Packet::GetSize(), ns3::EventId::GetUid(), ns3::Packet::GetUid(), ns3::dsdv::RoutingTable::LookupRoute(), m_advRoutingTable, m_ipv4, m_mainAddress, m_periodicUpdateTimer, m_routeAggregationTime, m_routingTable, m_settlingTime, m_socketAddresses, m_uniformRandomVariable, ns3::MicroSeconds(), ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_FUNCTION, packetSize, ns3::Socket::RecvFrom(), ns3::Packet::RemoveHeader(), ns3::Time::S, ns3::Simulator::Schedule(), SendTriggeredUpdate(), ns3::dsdv::RoutingTableEntry::SetEntriesChanged(), ns3::dsdv::RoutingTableEntry::SetFlag(), ns3::dsdv::RoutingTableEntry::SetHop(), ns3::dsdv::RoutingTableEntry::SetLifeTime(), ns3::dsdv::RoutingTableEntry::SetNextHop(), ns3::dsdv::RoutingTableEntry::SetSeqNo(), ns3::dsdv::RoutingTableEntry::SetSettlingTime(), ns3::dsdv::RoutingTable::Update(), and ns3::dsdv::VALID.
Referenced by NotifyAddAddress(), NotifyInterfaceUp(), and NotifyRemoveAddress().
|
overridevirtual |
Route input packet.
p | The packet |
header | The IPv4 header |
idev | The device |
ucb | The unicast forward callback |
mcb | The multicast forward callback |
lcb | The local deliver callback |
ecb | The error callback |
Implements ns3::Ipv4RoutingProtocol.
Definition at line 387 of file dsdv-routing-protocol.cc.
References ns3::Packet::Copy(), DeferredRouteOutput(), EnableBuffering, ns3::Socket::ERROR_NOROUTETOHOST, ns3::NetDevice::GetAddress(), ns3::Ipv4InterfaceAddress::GetBroadcast(), ns3::Ipv4Header::GetDestination(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::dsdv::RoutingTableEntry::GetNextHop(), ns3::dsdv::RoutingTableEntry::GetRoute(), ns3::Ipv4Header::GetSource(), ns3::Ipv4Header::GetTtl(), ns3::Packet::GetUid(), ns3::Ipv4Address::IsBroadcast(), ns3::Ipv4Address::IsMulticast(), ns3::Callback< R, UArgs >::IsNull(), ns3::dsdv::RoutingTable::LookupRoute(), m_ipv4, m_lo, m_mainAddress, m_routingTable, m_socketAddresses, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_ERROR, NS_LOG_FUNCTION, NS_LOG_LOGIC, and ns3::Packet::PeekPacketTag().
|
overridevirtual |
Query routing cache for an existing route, for an outbound packet.
This lookup is used by transport protocols. It does not cause any packet to be forwarded, and is synchronous. Can be used for multicast or unicast. The Linux equivalent is ip_route_output()
The header input parameter may have an uninitialized value for the source address, but the destination address should always be properly set by the caller.
p | packet to be routed. Note that this method may modify the packet. Callers may also pass in a null pointer. |
header | input parameter (used to form key to search for the route) |
oif | Output interface Netdevice. May be zero, or may be bound via socket options to a particular output interface. |
sockerr | Output parameter; socket errno |
Implements ns3::Ipv4RoutingProtocol.
Definition at line 279 of file dsdv-routing-protocol.cc.
References ns3::Packet::AddPacketTag(), ns3::dsdv::RoutingTable::AddRoute(), EnableBuffering, ns3::Socket::ERROR_NOROUTETOHOST, ns3::Socket::ERROR_NOTERROR, ns3::Ipv4Header::GetDestination(), ns3::dsdv::RoutingTableEntry::GetHop(), ns3::UniformRandomVariable::GetInteger(), ns3::dsdv::RoutingTableEntry::GetNextHop(), ns3::dsdv::RoutingTableEntry::GetRoute(), ns3::Packet::GetSize(), ns3::Packet::GetUid(), LookForQueuedPackets(), ns3::dsdv::RoutingTable::LookupRoute(), LoopbackRoute(), m_advRoutingTable, m_ipv4, m_routingTable, m_socketAddresses, m_uniformRandomVariable, ns3::MicroSeconds(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Packet::PeekPacketTag(), ns3::dsdv::RoutingTable::Purge(), ns3::Simulator::Schedule(), and SendTriggeredUpdate().
|
private |
Send a packet.
route | the route |
packet | the packet |
header | the IPv4 header |
Definition at line 1133 of file dsdv-routing-protocol.cc.
References ns3::Packet::Copy(), ns3::Ipv4Header::GetDestination(), ns3::Ipv4Header::GetProtocol(), m_ipv4, and NS_ASSERT.
Referenced by Start().
|
private |
Send packet from queue.
dst | - destination address to which we are sending the packet to |
route | - route identified for this packet |
Definition at line 1185 of file dsdv-routing-protocol.cc.
References ns3::dsdv::PacketQueue::Dequeue(), ns3::dsdv::PacketQueue::Find(), ns3::UniformRandomVariable::GetInteger(), ns3::dsdv::QueueEntry::GetIpv4Header(), ns3::dsdv::QueueEntry::GetPacket(), ns3::dsdv::PacketQueue::GetSize(), ns3::Ipv4Header::GetTtl(), ns3::dsdv::QueueEntry::GetUnicastForwardCallback(), m_ipv4, m_mainAddress, m_queue, m_uniformRandomVariable, ns3::MilliSeconds(), NS_LOG_DEBUG, ns3::dsdv::DeferredRouteOutputTag::oif, ns3::Packet::RemovePacketTag(), ns3::Simulator::Schedule(), ns3::Ipv4Header::SetSource(), and ns3::Ipv4Header::SetTtl().
Referenced by LookForQueuedPackets().
|
private |
Broadcasts the entire routing table for every PeriodicUpdateInterval.
Definition at line 901 of file dsdv-routing-protocol.cc.
References ns3::Packet::AddHeader(), DSDV_PORT, ns3::Ipv4InterfaceAddress::GetBroadcast(), ns3::dsdv::DsdvHeader::GetDst(), ns3::dsdv::DsdvHeader::GetDstSeqno(), ns3::dsdv::DsdvHeader::GetHopCount(), ns3::UniformRandomVariable::GetInteger(), ns3::dsdv::RoutingTable::GetListOfAllRoutes(), ns3::Ipv4InterfaceAddress::GetMask(), ns3::Ipv4Mask::GetOnes(), ns3::Packet::GetUid(), ns3::dsdv::RoutingTable::LookupRoute(), m_ipv4, m_mainAddress, m_periodicUpdateInterval, m_periodicUpdateTimer, m_routingTable, m_socketAddresses, m_uniformRandomVariable, MergeTriggerPeriodicUpdates(), ns3::MicroSeconds(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::dsdv::RoutingTable::Purge(), ns3::Time::S, ns3::Timer::Schedule(), ns3::Socket::Send(), ns3::Socket::SendTo(), ns3::dsdv::DsdvHeader::SetDst(), ns3::dsdv::DsdvHeader::SetDstSeqno(), ns3::dsdv::DsdvHeader::SetHopCount(), ns3::dsdv::RoutingTableEntry::SetSeqNo(), and ns3::dsdv::RoutingTable::Update().
Referenced by Start().
|
private |
Sends trigger update from a node.
Definition at line 826 of file dsdv-routing-protocol.cc.
References ns3::Packet::AddHeader(), ns3::dsdv::RoutingTable::AnyRunningEvent(), ns3::dsdv::RoutingTable::DeleteIpv4Event(), ns3::dsdv::RoutingTable::DeleteRoute(), DSDV_PORT, ns3::Ipv4InterfaceAddress::GetBroadcast(), ns3::dsdv::RoutingTableEntry::GetDestination(), ns3::dsdv::DsdvHeader::GetDst(), ns3::dsdv::RoutingTable::GetEventId(), ns3::dsdv::RoutingTableEntry::GetHop(), ns3::dsdv::RoutingTable::GetListOfAllRoutes(), ns3::Ipv4InterfaceAddress::GetMask(), ns3::Ipv4Mask::GetOnes(), ns3::dsdv::RoutingTableEntry::GetSeqNo(), ns3::Packet::GetSize(), ns3::Packet::GetUid(), ns3::dsdv::RoutingTable::LookupRoute(), m_advRoutingTable, m_ipv4, m_mainAddress, m_routingTable, m_socketAddresses, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Socket::SendTo(), ns3::dsdv::DsdvHeader::SetDst(), ns3::dsdv::DsdvHeader::SetDstSeqno(), ns3::dsdv::RoutingTableEntry::SetEntriesChanged(), ns3::dsdv::RoutingTableEntry::SetFlag(), ns3::dsdv::DsdvHeader::SetHopCount(), ns3::dsdv::RoutingTable::Update(), and ns3::dsdv::VALID.
Referenced by RecvDsdv(), and RouteOutput().
void ns3::dsdv::RoutingProtocol::SetEnableBufferFlag | ( | bool | f | ) |
Set enable buffer flag.
f | The enable buffer flag |
Definition at line 184 of file dsdv-routing-protocol.cc.
References EnableBuffering, and f().
Referenced by GetTypeId().
void ns3::dsdv::RoutingProtocol::SetEnableRAFlag | ( | bool | f | ) |
Set enable route aggregation (RA) flag.
f | the enable route aggregation (RA) flag |
Definition at line 208 of file dsdv-routing-protocol.cc.
References EnableRouteAggregation, and f().
Referenced by GetTypeId().
ipv4 | the ipv4 object this routing protocol is being associated with |
Typically, invoked directly or indirectly from ns3::Ipv4::SetRoutingProtocol
Implements ns3::Ipv4RoutingProtocol.
Definition at line 975 of file dsdv-routing-protocol.cc.
References ns3::dsdv::RoutingTable::AddRoute(), ns3::Ipv4Address::GetLoopback(), ns3::Simulator::GetMaximumSimulationTime(), ns3::dsdv::INVALID, nsclick-simple-lan::ipv4, m_ipv4, m_lo, m_routingTable, NS_ASSERT, ns3::Simulator::ScheduleNow(), ns3::dsdv::RoutingTableEntry::SetEntriesChanged(), ns3::dsdv::RoutingTableEntry::SetFlag(), and Start().
void ns3::dsdv::RoutingProtocol::SetWSTFlag | ( | bool | f | ) |
Set weighted settling time (WST) flag.
f | the weighted settling time (WST) flag |
Definition at line 196 of file dsdv-routing-protocol.cc.
References EnableWST, and f().
Referenced by GetTypeId().
|
private |
Start protocol operation.
Definition at line 265 of file dsdv-routing-protocol.cc.
References Drop(), ns3::UniformRandomVariable::GetInteger(), Holdtimes, m_advRoutingTable, m_ecb, m_maxQueuedPacketsPerDst, m_maxQueueLen, m_maxQueueTime, m_periodicUpdateInterval, m_periodicUpdateTimer, m_queue, m_routingTable, m_scb, m_uniformRandomVariable, ns3::MakeCallback(), ns3::MicroSeconds(), ns3::Timer::Schedule(), Send(), SendPeriodicUpdate(), ns3::Timer::SetFunction(), ns3::dsdv::RoutingTable::Setholddowntime(), ns3::dsdv::PacketQueue::SetMaxPacketsPerDst(), ns3::dsdv::PacketQueue::SetMaxQueueLen(), and ns3::dsdv::PacketQueue::SetQueueTimeout().
Referenced by SetIpv4().
|
static |
UDP Port for DSDV control traffic.
Definition at line 63 of file dsdv-routing-protocol.h.
Referenced by NotifyAddAddress(), NotifyInterfaceUp(), NotifyRemoveAddress(), SendPeriodicUpdate(), and SendTriggeredUpdate().
|
private |
Flag that is used to enable or disable buffering.
Definition at line 179 of file dsdv-routing-protocol.h.
Referenced by GetEnableBufferFlag(), RouteInput(), RouteOutput(), and SetEnableBufferFlag().
|
private |
This is a flag to enable route aggregation.
Route aggregation will aggregate all routes for 'RouteAggregationTime' from the time an update is received by a node and sends them as a single update .
Definition at line 187 of file dsdv-routing-protocol.h.
Referenced by GetEnableRAFlag(), RecvDsdv(), and SetEnableRAFlag().
|
private |
Flag that is used to enable or disable Weighted Settling Time.
Definition at line 181 of file dsdv-routing-protocol.h.
Referenced by GetSettlingTime(), GetWSTFlag(), and SetWSTFlag().
|
private |
Holdtimes is the multiplicative factor of PeriodicUpdateInterval for which the node waits since the last update before flushing a route from the routing table.
If PeriodicUpdateInterval is 8s and Holdtimes is 3, the node waits for 24s since the last update to flush this route from its routing table.
Definition at line 150 of file dsdv-routing-protocol.h.
Referenced by GetTypeId(), and Start().
|
private |
Advertised Routing table for the node.
Definition at line 168 of file dsdv-routing-protocol.h.
Referenced by MergeTriggerPeriodicUpdates(), NotifyInterfaceDown(), RecvDsdv(), RouteOutput(), SendTriggeredUpdate(), and Start().
|
private |
Error callback for own packets.
Definition at line 193 of file dsdv-routing-protocol.h.
Referenced by Start().
IP protocol.
Definition at line 160 of file dsdv-routing-protocol.h.
Referenced by DoDispose(), LoopbackRoute(), NotifyAddAddress(), NotifyInterfaceDown(), NotifyInterfaceUp(), NotifyRemoveAddress(), PrintRoutingTable(), RecvDsdv(), RouteInput(), RouteOutput(), Send(), SendPacketFromQueue(), SendPeriodicUpdate(), SendTriggeredUpdate(), and SetIpv4().
Loopback device used to defer route requests until a route is found.
Definition at line 164 of file dsdv-routing-protocol.h.
Referenced by LoopbackRoute(), RouteInput(), and SetIpv4().
|
private |
Nodes IP address.
Definition at line 158 of file dsdv-routing-protocol.h.
Referenced by Drop(), NotifyInterfaceUp(), RecvDsdv(), RouteInput(), SendPacketFromQueue(), SendPeriodicUpdate(), and SendTriggeredUpdate().
|
private |
The maximum number of packets that we allow per destination to buffer.
Definition at line 172 of file dsdv-routing-protocol.h.
Referenced by GetTypeId(), and Start().
|
private |
The maximum number of packets that we allow a routing protocol to buffer.
Definition at line 170 of file dsdv-routing-protocol.h.
Referenced by GetTypeId(), and Start().
|
private |
The maximum period of time that a routing protocol is allowed to buffer a packet for.
Definition at line 174 of file dsdv-routing-protocol.h.
Referenced by GetTypeId(), and Start().
|
private |
PeriodicUpdateInterval specifies the periodic time interval between which the a node broadcasts its entire routing table.
Definition at line 153 of file dsdv-routing-protocol.h.
Referenced by GetTypeId(), SendPeriodicUpdate(), and Start().
|
private |
Timer to trigger periodic updates from a node.
Definition at line 266 of file dsdv-routing-protocol.h.
Referenced by RecvDsdv(), SendPeriodicUpdate(), and Start().
|
private |
A "drop front on full" queue used by the routing layer to buffer packets to which it does not have a route.
Definition at line 177 of file dsdv-routing-protocol.h.
Referenced by DeferredRouteOutput(), LookForQueuedPackets(), SendPacketFromQueue(), and Start().
|
private |
Parameter that holds the route aggregation time interval.
Definition at line 189 of file dsdv-routing-protocol.h.
Referenced by GetTypeId(), and RecvDsdv().
|
private |
Main Routing table for the node.
Definition at line 166 of file dsdv-routing-protocol.h.
Referenced by GetSettlingTime(), LookForQueuedPackets(), MergeTriggerPeriodicUpdates(), NotifyAddAddress(), NotifyInterfaceDown(), NotifyInterfaceUp(), PrintRoutingTable(), RecvDsdv(), RouteInput(), RouteOutput(), SendPeriodicUpdate(), SendTriggeredUpdate(), SetIpv4(), and Start().
|
private |
Unicast callback for own packets.
Definition at line 191 of file dsdv-routing-protocol.h.
Referenced by Start().
|
private |
SettlingTime specifies the time for which a node waits before propagating an update.
It waits for this time interval in hope of receiving an update with a better metric.
Definition at line 156 of file dsdv-routing-protocol.h.
Referenced by GetTypeId(), and RecvDsdv().
|
private |
Raw socket per each IP interface, map socket -> iface address (IP + mask)
Definition at line 162 of file dsdv-routing-protocol.h.
Referenced by DoDispose(), FindSocketWithInterfaceAddress(), LoopbackRoute(), NotifyAddAddress(), NotifyInterfaceDown(), NotifyInterfaceUp(), NotifyRemoveAddress(), RecvDsdv(), RouteInput(), RouteOutput(), SendPeriodicUpdate(), and SendTriggeredUpdate().
|
private |
Timer used by the trigger updates in case of Weighted Settling Time is used.
Definition at line 268 of file dsdv-routing-protocol.h.
|
private |
Provides uniform random variables.
Definition at line 271 of file dsdv-routing-protocol.h.
Referenced by RoutingProtocol(), AssignStreams(), RecvDsdv(), RouteOutput(), SendPacketFromQueue(), SendPeriodicUpdate(), and Start().
|
private |
This is the weighted factor to determine the weighted settling time.
Definition at line 183 of file dsdv-routing-protocol.h.
Referenced by GetSettlingTime(), and GetTypeId().