Nix-vector routing protocol. More...
#include "ipv4-nix-vector-routing.h"
Public Member Functions | |
Ipv4NixVectorRouting () | |
~Ipv4NixVectorRouting () | |
void | FlushGlobalNixRoutingCache (void) const |
Called when run-time link topology change occurs which iterates through the node list and flushes any nix vector caches. More... | |
void | PrintRoutingPath (Ptr< Node > source, Ipv4Address dest, Ptr< OutputStreamWrapper > stream, Time::Unit unit) const |
Print the Routing Path according to Nix Routing. More... | |
void | SetNode (Ptr< Node > node) |
Set the Node pointer of the node for which this routing protocol is to be placed. More... | |
![]() | |
Object () | |
Constructor. More... | |
virtual | ~Object () |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose (void) |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator (void) const |
Get an iterator to the Objects aggregated to this one. More... | |
virtual TypeId | GetInstanceTypeId (void) const |
Get the most derived TypeId for this 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... | |
template<typename T > | |
Ptr< T > | GetObject (void) const |
Get a pointer to the requested aggregated Object. More... | |
void | Initialize (void) |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized (void) const |
Check if the object has been initialized. More... | |
![]() | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount (void) const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. More... | |
void | Ref (void) const |
Increment the reference count. More... | |
void | Unref (void) const |
Decrement the reference count. More... | |
![]() | |
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 erros. 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 (void) |
The Interface ID of the Global Router interface. More... | |
![]() | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
![]() | |
static TypeId | GetTypeId (void) |
Register this type. More... | |
![]() | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
Private Types | |
typedef std::unordered_map< Ipv4Address, ns3::Ptr< ns3::Node >, Ipv4AddressHash > | Ipv4AddressToNodeMap |
Mapping of IPv4 address to ns-3 node. More... | |
Private Member Functions | |
bool | BFS (uint32_t numberOfNodes, Ptr< Node > source, Ptr< Node > dest, std::vector< Ptr< Node > > &parentVector, Ptr< NetDevice > oif) const |
Breadth first search algorithm. More... | |
void | BuildIpv4AddressToNodeMap (void) const |
Build map from IPv4 Address to Node for faster lookup. More... | |
bool | BuildNixVector (const std::vector< Ptr< Node > > &parentVector, uint32_t source, uint32_t dest, Ptr< NixVector > nixVector) const |
Recurses the parent vector, created by BFS and actually builds the nixvector. More... | |
bool | BuildNixVectorLocal (Ptr< NixVector > nixVector) |
Special variation of BuildNixVector for when a node is sending to itself. More... | |
void | CheckCacheStateAndFlush (void) const |
Flushes routing caches if required. More... | |
void | DoDispose (void) |
Destructor implementation. More... | |
uint32_t | FindNetDeviceForNixIndex (Ptr< Node > node, uint32_t nodeIndex, Ipv4Address &gatewayIp) const |
Nix index is with respect to the neighbors. More... | |
uint32_t | FindTotalNeighbors (Ptr< Node > node) const |
Simply iterates through the nodes net-devices and determines how many neighbors the node has. More... | |
void | FlushIpv4RouteCache (void) const |
Flushes the cache which stores the Ipv4 route based on the destination IP. More... | |
void | FlushNixCache (void) const |
Flushes the cache which stores nix-vector based on destination IP. More... | |
void | GetAdjacentNetDevices (Ptr< NetDevice > netDevice, Ptr< Channel > channel, NetDeviceContainer &netDeviceContainer) const |
Given a net-device returns all the adjacent net-devices, essentially getting the neighbors on that channel. More... | |
Ptr< Ipv4Route > | GetIpv4RouteInCache (Ipv4Address address) |
Checks the cache based on dest IP for the Ipv4Route. More... | |
Ptr< NixVector > | GetNixVector (Ptr< Node > source, Ipv4Address dest, Ptr< NetDevice > oif) const |
Takes in the source node and dest IP and calls GetNodeByIp, BFS, accounting for any output interface specified, and finally BuildNixVector to return the built nix-vector. More... | |
Ptr< NixVector > | GetNixVectorInCache (Ipv4Address address) const |
Checks the cache based on dest IP for the nix-vector. More... | |
Ptr< Node > | GetNodeByIp (Ipv4Address dest) const |
Iterates through the node list and finds the one corresponding to the given Ipv4Address. More... | |
Ptr< BridgeNetDevice > | NetDeviceIsBridged (Ptr< NetDevice > nd) const |
Determine if the NetDevice is bridged. More... | |
virtual void | NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address) |
virtual void | NotifyInterfaceDown (uint32_t interface) |
virtual void | NotifyInterfaceUp (uint32_t interface) |
virtual void | NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address) |
virtual void | PrintRoutingTable (Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const |
Print the Routing Table entries. More... | |
void | ResetTotalNeighbors (void) |
Upon a run-time topology change caches are flushed and the total number of neighbors is reset to zero. More... | |
virtual bool | RouteInput (Ptr< const Packet > p, const Ipv4Header &header, Ptr< const NetDevice > idev, UnicastForwardCallback ucb, MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb) |
Route an input packet (to be forwarded or locally delivered) More... | |
virtual 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. More... | |
virtual void | SetIpv4 (Ptr< Ipv4 > ipv4) |
Private Attributes | |
Ptr< Ipv4 > | m_ipv4 |
IPv4 object. More... | |
Ipv4RouteMap_t | m_ipv4RouteCache |
Cache stores Ipv4Routes based on destination ip. More... | |
NixMap_t | m_nixCache |
Cache stores nix-vectors based on destination ip. More... | |
Ptr< Node > | m_node |
Node object. More... | |
uint32_t | m_totalNeighbors |
Total neighbors used for nix-vector to determine number of bits. More... | |
Static Private Attributes | |
static Ipv4AddressToNodeMap | g_ipv4AddressToNodeMap |
Address to node map. More... | |
static bool | g_isCacheDirty = false |
Flag to mark when caches are dirty and need to be flushed. More... | |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoInitialize (void) |
Initialize() implementation. More... | |
virtual void | NotifyNewAggregate (void) |
Notify all Objects aggregated to this one of a new Object being aggregated. More... | |
![]() | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted (void) |
Notifier called once the ObjectBase is fully constructed. More... | |
![]() | |
static TypeId | GetObjectIid (void) |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
Nix-vector routing protocol.
ns3::Ipv4NixVectorRouting is accessible through the following paths with Config::Set and Config::Connect:
No Attributes are defined for this type.
No TraceSources are defined for this type.
Size of this type is 152 bytes (on a 64-bit architecture).
Definition at line 61 of file ipv4-nix-vector-routing.h.
|
private |
Mapping of IPv4 address to ns-3 node.
Used to avoid linear searching of nodes/devices to find a node in GetNodeByIp() method. NIX vector routing assumes IP addresses are unique so mapping can be done without duplication.
Definition at line 275 of file ipv4-nix-vector-routing.h.
ns3::Ipv4NixVectorRouting::Ipv4NixVectorRouting | ( | ) |
Definition at line 52 of file ipv4-nix-vector-routing.cc.
References NS_LOG_FUNCTION_NOARGS.
ns3::Ipv4NixVectorRouting::~Ipv4NixVectorRouting | ( | ) |
Definition at line 58 of file ipv4-nix-vector-routing.cc.
References NS_LOG_FUNCTION_NOARGS.
|
private |
Breadth first search algorithm.
[in] | numberOfNodes | total number of nodes |
[in] | source | Source Node |
[in] | dest | Destination Node |
[out] | parentVector | Parent vector for retracing routes |
[in] | oif | specific output interface to use from source node, if not null |
Definition at line 829 of file ipv4-nix-vector-routing.cc.
References ns3::NetDeviceContainer::Begin(), third::channel, ns3::NetDeviceContainer::End(), GetAdjacentNetDevices(), ns3::Node::GetDevice(), ns3::Node::GetId(), ns3::Node::GetNDevices(), ns3::Object::GetObject(), NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
Referenced by GetNixVector().
|
private |
Build map from IPv4 Address to Node for faster lookup.
Definition at line 352 of file ipv4-nix-vector-routing.cc.
References ns3::NodeList::Begin(), ns3::NodeList::End(), g_ipv4AddressToNodeMap, ns3::Node::GetDevice(), ns3::Node::GetId(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Node::GetNDevices(), ns3::Object::GetObject(), NS_ABORT_MSG_IF, NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
Referenced by GetNodeByIp().
|
private |
Recurses the parent vector, created by BFS and actually builds the nixvector.
[in] | parentVector | Parent vector for retracing routes |
[in] | source | Source Node index |
[in] | dest | Destination Node index |
[out] | nixVector | the NixVector to be used for routing |
Definition at line 239 of file ipv4-nix-vector-routing.cc.
References ns3::NixVector::AddNeighborIndex(), ns3::NetDeviceContainer::Begin(), ns3::NixVector::BitCount(), third::channel, ns3::NetDeviceContainer::End(), GetAdjacentNetDevices(), ns3::Node::GetDevice(), ns3::Node::GetId(), ns3::NetDeviceContainer::GetN(), ns3::Node::GetNDevices(), NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
Referenced by GetNixVector().
Special variation of BuildNixVector for when a node is sending to itself.
[out] | nixVector | the NixVector to be used for routing |
Definition at line 212 of file ipv4-nix-vector-routing.cc.
References ns3::NixVector::AddNeighborIndex(), ns3::NixVector::BitCount(), ns3::Node::GetDevice(), ns3::Node::GetId(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Node::GetNDevices(), m_ipv4, m_node, NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
|
private |
Flushes routing caches if required.
Definition at line 1095 of file ipv4-nix-vector-routing.cc.
References FlushGlobalNixRoutingCache(), and g_isCacheDirty.
Referenced by GetIpv4RouteInCache(), GetNixVectorInCache(), PrintRoutingPath(), PrintRoutingTable(), RouteInput(), and RouteOutput().
|
privatevirtual |
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 74 of file ipv4-nix-vector-routing.cc.
References ns3::Object::DoDispose(), m_ipv4, m_node, and NS_LOG_FUNCTION_NOARGS.
|
private |
Nix index is with respect to the neighbors.
The net-device index must be derived from this
[in] | node | the current node under consideration |
[in] | nodeIndex | Nix Node index |
[out] | gatewayIp | IP address of the gateway |
Definition at line 494 of file ipv4-nix-vector-routing.cc.
References third::channel, ns3::NetDeviceContainer::Get(), GetAdjacentNetDevices(), ns3::Node::GetDevice(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::NetDeviceContainer::GetN(), ns3::Node::GetNDevices(), and ns3::Object::GetObject().
Referenced by PrintRoutingPath(), RouteInput(), and RouteOutput().
Simply iterates through the nodes net-devices and determines how many neighbors the node has.
[in] | node | node pointer |
Definition at line 423 of file ipv4-nix-vector-routing.cc.
References third::channel, GetAdjacentNetDevices(), ns3::Node::GetDevice(), ns3::NetDeviceContainer::GetN(), and ns3::Node::GetNDevices().
Referenced by PrintRoutingPath(), RouteInput(), and RouteOutput().
void ns3::Ipv4NixVectorRouting::FlushGlobalNixRoutingCache | ( | void | ) | const |
Called when run-time link topology change occurs which iterates through the node list and flushes any nix vector caches.
const
is used here due to need to potentially flush the cache in const methods such as PrintRoutingTable. Caches are stored in mutable variables and flushed in const methods. Definition at line 94 of file ipv4-nix-vector-routing.cc.
References ns3::NodeList::Begin(), ns3::NodeList::End(), g_ipv4AddressToNodeMap, ns3::Object::GetObject(), NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
Referenced by CheckCacheStateAndFlush().
|
private |
Flushes the cache which stores the Ipv4 route based on the destination IP.
Definition at line 124 of file ipv4-nix-vector-routing.cc.
References m_ipv4RouteCache, and NS_LOG_FUNCTION_NOARGS.
|
private |
Flushes the cache which stores nix-vector based on destination IP.
Definition at line 117 of file ipv4-nix-vector-routing.cc.
References m_nixCache, and NS_LOG_FUNCTION_NOARGS.
|
private |
Given a net-device returns all the adjacent net-devices, essentially getting the neighbors on that channel.
[in] | netDevice | the NetDevice attached to the channel. |
[in] | channel | the channel to check |
[out] | netDeviceContainer | the NetDeviceContainer of the NetDevices in the channel. |
Definition at line 312 of file ipv4-nix-vector-routing.cc.
References ns3::NetDeviceContainer::Add(), third::channel, NetDeviceIsBridged(), NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
Referenced by BFS(), BuildNixVector(), FindNetDeviceForNixIndex(), and FindTotalNeighbors().
|
private |
Checks the cache based on dest IP for the Ipv4Route.
address | Address to check |
Definition at line 194 of file ipv4-nix-vector-routing.cc.
References first::address, CheckCacheStateAndFlush(), m_ipv4RouteCache, NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
Referenced by RouteInput(), and RouteOutput().
|
private |
Takes in the source node and dest IP and calls GetNodeByIp, BFS, accounting for any output interface specified, and finally BuildNixVector to return the built nix-vector.
source | Source node |
dest | Destination node address |
oif | Preferred output interface |
Definition at line 131 of file ipv4-nix-vector-routing.cc.
References BFS(), BuildNixVector(), ns3::Node::GetId(), ns3::NodeList::GetNNodes(), GetNodeByIp(), NS_LOG_DEBUG, NS_LOG_ERROR, and NS_LOG_FUNCTION_NOARGS.
Referenced by PrintRoutingPath(), and RouteOutput().
|
private |
Checks the cache based on dest IP for the nix-vector.
address | Address to check |
Definition at line 176 of file ipv4-nix-vector-routing.cc.
References first::address, CheckCacheStateAndFlush(), m_nixCache, NS_LOG_FUNCTION_NOARGS, and NS_LOG_LOGIC.
Referenced by PrintRoutingPath(), and RouteOutput().
|
private |
Iterates through the node list and finds the one corresponding to the given Ipv4Address.
dest | destination node IP |
Definition at line 395 of file ipv4-nix-vector-routing.cc.
References BuildIpv4AddressToNodeMap(), g_ipv4AddressToNodeMap, NS_LOG_ERROR, and NS_LOG_FUNCTION_NOARGS.
Referenced by GetNixVector(), and PrintRoutingPath().
|
static |
The Interface ID of the Global Router interface.
Definition at line 42 of file ipv4-nix-vector-routing.cc.
References ns3::TypeId::SetParent().
|
private |
Determine if the NetDevice is bridged.
nd | the NetDevice to check |
Definition at line 454 of file ipv4-nix-vector-routing.cc.
References ns3::Node::GetDevice(), ns3::Node::GetNDevices(), NS_ABORT_MSG_UNLESS, NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by GetAdjacentNetDevices().
|
privatevirtual |
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 818 of file ipv4-nix-vector-routing.cc.
References g_isCacheDirty.
|
privatevirtual |
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 813 of file ipv4-nix-vector-routing.cc.
References g_isCacheDirty.
|
privatevirtual |
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 808 of file ipv4-nix-vector-routing.cc.
References g_isCacheDirty.
|
privatevirtual |
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 823 of file ipv4-nix-vector-routing.cc.
References g_isCacheDirty.
void ns3::Ipv4NixVectorRouting::PrintRoutingPath | ( | Ptr< Node > | source, |
Ipv4Address | dest, | ||
Ptr< OutputStreamWrapper > | stream, | ||
Time::Unit | unit | ||
) | const |
Print the Routing Path according to Nix Routing.
source | Source node |
dest | Destination node address |
stream | The ostream the Routing path is printed to |
unit | the time unit to be used in the report |
Definition at line 975 of file ipv4-nix-vector-routing.cc.
References ns3::Time::As(), ns3::NixVector::BitCount(), CheckCacheStateAndFlush(), ns3::NixVector::Copy(), ns3::NixVector::ExtractNeighborIndex(), FindNetDeviceForNixIndex(), FindTotalNeighbors(), ns3::Node::GetDevice(), ns3::Node::GetId(), GetNixVector(), GetNixVectorInCache(), GetNodeByIp(), ns3::Object::GetObject(), ns3::OutputStreamWrapper::GetStream(), m_nixCache, ns3::Now(), NS_LOG_ERROR, NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
privatevirtual |
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 747 of file ipv4-nix-vector-routing.cc.
References ns3::Time::As(), CheckCacheStateAndFlush(), ns3::Names::FindName(), ns3::OutputStreamWrapper::GetStream(), m_ipv4, m_ipv4RouteCache, m_nixCache, and ns3::Now().
|
private |
Upon a run-time topology change caches are flushed and the total number of neighbors is reset to zero.
|
privatevirtual |
Route an input packet (to be forwarded or locally delivered)
This lookup is used in the forwarding process. The packet is handed over to the Ipv4RoutingProtocol, and will get forwarded onward by one of the callbacks. The Linux equivalent is ip_route_input(). There are four valid outcomes, and a matching callbacks to handle each.
p | received packet |
header | input parameter used to form a search key for a route |
idev | Pointer to ingress network device |
ucb | Callback for the case in which the packet is to be forwarded as unicast |
mcb | Callback for the case in which the packet is to be forwarded as multicast |
lcb | Callback for the case in which the packet is to be locally delivered |
ecb | Callback to call if there is an error in forwarding |
Implements ns3::Ipv4RoutingProtocol.
Definition at line 662 of file ipv4-nix-vector-routing.cc.
References ns3::NixVector::BitCount(), CheckCacheStateAndFlush(), ns3::NixVector::ExtractNeighborIndex(), FindNetDeviceForNixIndex(), FindTotalNeighbors(), ns3::Ipv4Header::GetDestination(), ns3::Node::GetDevice(), ns3::Node::GetId(), GetIpv4RouteInCache(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Packet::GetNixVector(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), m_ipv4, m_ipv4RouteCache, m_node, m_totalNeighbors, NS_ASSERT, NS_LOG_FUNCTION_NOARGS, NS_LOG_LOGIC, ns3::Ipv4Route::SetDestination(), ns3::Ipv4Route::SetGateway(), ns3::Ipv4Route::SetOutputDevice(), and ns3::Ipv4Route::SetSource().
|
privatevirtual |
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 540 of file ipv4-nix-vector-routing.cc.
References ns3::NixVector::BitCount(), CheckCacheStateAndFlush(), ns3::NixVector::Copy(), ns3::Socket::ERROR_NOROUTETOHOST, ns3::Socket::ERROR_NOTERROR, ns3::NixVector::ExtractNeighborIndex(), FindNetDeviceForNixIndex(), FindTotalNeighbors(), ns3::Ipv4Header::GetDestination(), ns3::Node::GetDevice(), GetIpv4RouteInCache(), GetNixVector(), GetNixVectorInCache(), ns3::Ipv4Route::GetOutputDevice(), ns3::NixVector::GetRemainingBits(), m_ipv4, m_ipv4RouteCache, m_nixCache, m_node, m_totalNeighbors, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_ERROR, NS_LOG_FUNCTION_NOARGS, NS_LOG_LOGIC, ns3::Ipv4Route::SetDestination(), ns3::Ipv4Route::SetGateway(), ns3::Packet::SetNixVector(), ns3::Ipv4Route::SetOutputDevice(), and ns3::Ipv4Route::SetSource().
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 64 of file ipv4-nix-vector-routing.cc.
References m_ipv4, NS_ASSERT, and NS_LOG_DEBUG.
Set the Node pointer of the node for which this routing protocol is to be placed.
node | Node pointer |
Definition at line 86 of file ipv4-nix-vector-routing.cc.
References m_node, and NS_LOG_FUNCTION_NOARGS.
|
staticprivate |
Address to node map.
Definition at line 276 of file ipv4-nix-vector-routing.h.
Referenced by BuildIpv4AddressToNodeMap(), FlushGlobalNixRoutingCache(), and GetNodeByIp().
|
staticprivate |
Flag to mark when caches are dirty and need to be flushed.
Used for lazy cleanup of caches when there are many topology changes.
Definition at line 253 of file ipv4-nix-vector-routing.h.
Referenced by CheckCacheStateAndFlush(), NotifyAddAddress(), NotifyInterfaceDown(), NotifyInterfaceUp(), and NotifyRemoveAddress().
IPv4 object.
Definition at line 261 of file ipv4-nix-vector-routing.h.
Referenced by BuildNixVectorLocal(), DoDispose(), PrintRoutingTable(), RouteInput(), RouteOutput(), and SetIpv4().
|
mutableprivate |
Cache stores Ipv4Routes based on destination ip.
Definition at line 259 of file ipv4-nix-vector-routing.h.
Referenced by FlushIpv4RouteCache(), GetIpv4RouteInCache(), PrintRoutingTable(), RouteInput(), and RouteOutput().
|
mutableprivate |
Cache stores nix-vectors based on destination ip.
Definition at line 256 of file ipv4-nix-vector-routing.h.
Referenced by FlushNixCache(), GetNixVectorInCache(), PrintRoutingPath(), PrintRoutingTable(), and RouteOutput().
Node object.
Definition at line 262 of file ipv4-nix-vector-routing.h.
Referenced by BuildNixVectorLocal(), DoDispose(), RouteInput(), RouteOutput(), and SetNode().
|
private |
Total neighbors used for nix-vector to determine number of bits.
Definition at line 265 of file ipv4-nix-vector-routing.h.
Referenced by RouteInput(), and RouteOutput().