OLSR routing protocol for IPv4. More...
#include <olsr-routing-protocol.h>
Public Member Functions | |
RoutingProtocol () | |
virtual | ~RoutingProtocol () |
void | AddHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask) |
Inject Association to be sent in HNA message. | |
int64_t | AssignStreams (int64_t stream) |
void | Dump (void) |
std::set< uint32_t > | GetInterfaceExclusions () const |
std::vector< RoutingTableEntry > | GetRoutingTableEntries () const |
void | RemoveHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask) |
Removes Association sent in HNA message. | |
void | SetInterfaceExclusions (std::set< uint32_t > exceptions) |
void | SetMainInterface (uint32_t interface) |
Set the OLSR main address to the first address on the indicated interface. | |
void | SetRoutingTableAssociation (Ptr< Ipv4StaticRouting > routingTable) |
Inject Associations from an Ipv4StaticRouting instance. | |
![]() | |
virtual void | NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address)=0 |
virtual void | NotifyInterfaceDown (uint32_t interface)=0 |
virtual void | NotifyInterfaceUp (uint32_t interface)=0 |
virtual void | NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address)=0 |
virtual void | PrintRoutingTable (Ptr< OutputStreamWrapper > stream) const =0 |
Print the Routing Table entries. | |
virtual bool | RouteInput (Ptr< const Packet > p, const Ipv4Header &header, Ptr< const NetDevice > idev, UnicastForwardCallback ucb, MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb)=0 |
Route an input packet (to be forwarded or locally delivered) | |
virtual Ptr< Ipv4Route > | RouteOutput (Ptr< Packet > p, const Ipv4Header &header, Ptr< NetDevice > oif, Socket::SocketErrno &sockerr)=0 |
Query routing cache for an existing route, for an outbound packet. | |
virtual void | SetIpv4 (Ptr< Ipv4 > ipv4)=0 |
![]() | |
Object () | |
virtual | ~Object () |
void | AggregateObject (Ptr< Object > other) |
void | Dispose (void) |
AggregateIterator | GetAggregateIterator (void) const |
virtual TypeId | GetInstanceTypeId (void) const |
template<typename T > | |
Ptr< T > | GetObject (void) const |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
void | Start (void) |
![]() | |
SimpleRefCount () | |
SimpleRefCount (const SimpleRefCount &o) | |
uint32_t | GetReferenceCount (void) const |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
void | Ref (void) const |
void | Unref (void) const |
![]() | |
virtual | ~ObjectBase () |
void | GetAttribute (std::string name, AttributeValue &value) const |
bool | GetAttributeFailSafe (std::string name, AttributeValue &attribute) const |
void | SetAttribute (std::string name, const AttributeValue &value) |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Static Public Member Functions | |
static TypeId | GetTypeId (void) |
This method returns the TypeId associated to ns3::olsr::RoutingProtocol. |
Protected Member Functions | |
virtual void | DoStart (void) |
Private Member Functions | |
void | AddAssociationTuple (const AssociationTuple &tuple) |
Adds a host network association tuple to the Association Set. | |
void | AddDuplicateTuple (const DuplicateTuple &tuple) |
Adds a duplicate tuple to the Duplicate Set. | |
void | AddEntry (const Ipv4Address &dest, const Ipv4Address &next, uint32_t interface, uint32_t distance) |
Adds a new entry into the routing table. | |
void | AddEntry (const Ipv4Address &dest, const Ipv4Address &next, const Ipv4Address &interfaceAddress, uint32_t distance) |
void | AddIfaceAssocTuple (const IfaceAssocTuple &tuple) |
Adds an interface association tuple to the Interface Association Set. | |
void | AddMprSelectorTuple (const MprSelectorTuple &tuple) |
Adds an MPR selector tuple to the MPR Selector Set. | |
void | AddNeighborTuple (const NeighborTuple &tuple) |
Adds a neighbor tuple to the Neighbor Set. | |
void | AddTopologyTuple (const TopologyTuple &tuple) |
Adds a topology tuple to the Topology Set. | |
void | AddTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple) |
Adds a 2-hop neighbor tuple to the 2-hop Neighbor Set. | |
void | AssociationTupleTimerExpire (Ipv4Address gatewayAddr, Ipv4Address networkAddr, Ipv4Mask netmask) |
Removes tuple_ if expired. Else timer is rescheduled to expire at tuple_->time(). | |
void | Clear () |
Clears the routing table and frees the memory assigned to each one of its entries. | |
int | Degree (NeighborTuple const &tuple) |
This auxiliary function (defined in RFC 3626) is used for calculating the MPR Set. | |
void | DoDispose () |
void | DupTupleTimerExpire (Ipv4Address address, uint16_t sequenceNumber) |
Removes tuple if expired. Else timer is rescheduled to expire at tuple.expirationTime. | |
bool | FindSendEntry (const RoutingTableEntry &entry, RoutingTableEntry &outEntry) const |
Finds the appropiate entry which must be used in order to forward a data packet to a next hop (given a destination). | |
void | ForwardDefault (olsr::MessageHeader olsrMessage, DuplicateTuple *duplicated, const Ipv4Address &localIface, const Ipv4Address &senderAddress) |
OLSR's default forwarding algorithm. | |
Ipv4Address | GetMainAddress (Ipv4Address iface_addr) const |
Gets the main address associated with a given interface address. | |
uint16_t | GetMessageSequenceNumber () |
Increments message sequence number and returns the new value. | |
uint16_t | GetPacketSequenceNumber () |
Increments packet sequence number and returns the new value. | |
uint32_t | GetSize () const |
void | HelloTimerExpire () |
Sends a HELLO message and reschedules the HELLO timer. | |
void | HnaTimerExpire () |
Sends an HNA message (if the node has associated hosts/networks) and reschedules the HNA timer. | |
void | IfaceAssocTupleTimerExpire (Ipv4Address ifaceAddr) |
Removes tuple_ if expired. Else timer is rescheduled to expire at tuple_->time(). | |
void | IncrementAnsn () |
bool | IsMyOwnAddress (const Ipv4Address &a) const |
Check that address is one of my interfaces. | |
void | LinkSensing (const olsr::MessageHeader &msg, const olsr::MessageHeader::Hello &hello, const Ipv4Address &receiverIface, const Ipv4Address &sender_iface) |
Updates Link Set according to a new received HELLO message (following RFC 3626 specification). Neighbor Set is also updated if needed. | |
void | LinkTupleAdded (const LinkTuple &tuple, uint8_t willingness) |
void | LinkTupleTimerExpire (Ipv4Address neighborIfaceAddr) |
Removes tuple_ if expired. Else if symmetric time has expired then it is assumed a neighbor loss and agent_->nb_loss() is called. In this case the timer is rescheduled to expire at tuple_->time(). Otherwise the timer is rescheduled to expire at the minimum between tuple_->time() and tuple_->sym_time(). | |
void | LinkTupleUpdated (const LinkTuple &tuple, uint8_t willingness) |
This function is invoked when a link tuple is updated. Its aim is to also update the corresponding neighbor tuple if it is needed. | |
bool | Lookup (const Ipv4Address &dest, RoutingTableEntry &outEntry) const |
Looks up an entry for the specified destination address. | |
void | MidTimerExpire () |
Sends a MID message (if the node has more than one interface) and resets the MID timer. | |
void | MprComputation () |
Computates MPR set of a node following RFC 3626 hints. | |
void | MprSelTupleTimerExpire (Ipv4Address mainAddr) |
Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time(). | |
void | Nb2hopTupleTimerExpire (Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr) |
Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time(). | |
void | NeighborLoss (const LinkTuple &tuple) |
Performs all actions needed when a neighbor loss occurs. | |
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) |
void | PopulateMprSelectorSet (const olsr::MessageHeader &msg, const olsr::MessageHeader::Hello &hello) |
Updates the MPR Selector Set according to the information contained in a new received HELLO message (following RFC 3626). | |
void | PopulateNeighborSet (const olsr::MessageHeader &msg, const olsr::MessageHeader::Hello &hello) |
Updates the Neighbor Set according to the information contained in a new received HELLO message (following RFC 3626). | |
void | PopulateTwoHopNeighborSet (const olsr::MessageHeader &msg, const olsr::MessageHeader::Hello &hello) |
Updates the 2-hop Neighbor Set according to the information contained in a new received HELLO message (following RFC 3626). | |
virtual void | PrintRoutingTable (Ptr< OutputStreamWrapper > stream) const |
void | ProcessHello (const olsr::MessageHeader &msg, const Ipv4Address &receiverIface, const Ipv4Address &senderIface) |
Processes a HELLO message following RFC 3626 specification. | |
void | ProcessHna (const olsr::MessageHeader &msg, const Ipv4Address &senderIface) |
Processes a HNA message following RFC 3626 specification. | |
void | ProcessMid (const olsr::MessageHeader &msg, const Ipv4Address &senderIface) |
Processes a MID message following RFC 3626 specification. | |
void | ProcessTc (const olsr::MessageHeader &msg, const Ipv4Address &senderIface) |
Processes a TC message following RFC 3626 specification. | |
void | QueueMessage (const olsr::MessageHeader &message, Time delay) |
Enques an OLSR message which will be sent with a delay of (0, delay]. | |
void | RecvOlsr (Ptr< Socket > socket) |
void | RemoveAssociationTuple (const AssociationTuple &tuple) |
Removes a host network association tuple from the Association Set. | |
void | RemoveDuplicateTuple (const DuplicateTuple &tuple) |
Removes a duplicate tuple from the Duplicate Set. | |
void | RemoveEntry (const Ipv4Address &dest) |
Deletes the entry whose destination address is given. | |
void | RemoveIfaceAssocTuple (const IfaceAssocTuple &tuple) |
Removes an interface association tuple from the Interface Association Set. | |
void | RemoveLinkTuple (const LinkTuple &tuple) |
Removes a link tuple from the Link Set. | |
void | RemoveMprSelectorTuple (const MprSelectorTuple &tuple) |
Removes an MPR selector tuple from the MPR Selector Set. | |
void | RemoveNeighborTuple (const NeighborTuple &tuple) |
Removes a neighbor tuple from the Neighbor Set. | |
void | RemoveTopologyTuple (const TopologyTuple &tuple) |
Removes a topology tuple from the Topology Set. | |
void | RemoveTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple) |
Removes a 2-hop neighbor tuple from the 2-hop Neighbor Set. | |
virtual bool | RouteInput (Ptr< const Packet > p, const Ipv4Header &header, Ptr< const NetDevice > idev, UnicastForwardCallback ucb, MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb) |
virtual Ptr< Ipv4Route > | RouteOutput (Ptr< Packet > p, const Ipv4Header &header, Ptr< NetDevice > oif, Socket::SocketErrno &sockerr) |
void | RoutingTableComputation () |
Creates the routing table of the node following RFC 3626 hints. | |
void | SendHello () |
Creates a new OLSR HELLO message which is buffered for being sent later on. | |
void | SendHna () |
Creates a new OLSR HNA message which is buffered for being sent later on. | |
void | SendMid () |
Creates a new OLSR MID message which is buffered for being sent later on. | |
void | SendPacket (Ptr< Packet > packet, const MessageList &containedMessages) |
void | SendQueuedMessages () |
Creates as many OLSR packets as needed in order to send all buffered OLSR messages. | |
void | SendTc () |
Creates a new OLSR TC message which is buffered for being sent later on. | |
virtual void | SetIpv4 (Ptr< Ipv4 > ipv4) |
void | TcTimerExpire () |
Sends a TC message (if there exists any MPR selector) and reschedules the TC timer. | |
void | TopologyTupleTimerExpire (Ipv4Address destAddr, Ipv4Address lastAddr) |
Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time(). | |
bool | UsesNonOlsrOutgoingInterface (const Ipv4RoutingTableEntry &route) |
Tests whether or not the specified route uses a non-OLSR outgoing interface. Returns true if the outgoing interface of the specified route is a non-OLSR interface. Returns false otherwise. |
Friends | |
class | OlsrMprTestCase |
Additional Inherited Members | |
![]() | |
typedef Callback< void, Ptr < const Packet >, const Ipv4Header &, Socket::SocketErrno > | ErrorCallback |
typedef Callback< void, Ptr < const Packet >, const Ipv4Header &, uint32_t > | LocalDeliverCallback |
typedef Callback< void, Ptr < Ipv4MulticastRoute >, Ptr < const Packet >, const Ipv4Header & > | MulticastForwardCallback |
typedef Callback< void, Ptr < Ipv4Route >, Ptr< const Packet >, const Ipv4Header & > | UnicastForwardCallback |
OLSR routing protocol for IPv4.
Definition at line 78 of file olsr-routing-protocol.h.
ns3::olsr::RoutingProtocol::RoutingProtocol | ( | ) |
Definition at line 192 of file olsr-routing-protocol.cc.
References m_hnaRoutingTable, and m_uniformRandomVariable.
|
virtual |
Definition at line 206 of file olsr-routing-protocol.cc.
|
private |
Adds a host network association tuple to the Association Set.
tuple | the host network association tuple to be added. |
Definition at line 2685 of file olsr-routing-protocol.cc.
References ns3::OlsrState::InsertAssociationTuple(), and m_state.
Referenced by ProcessHna().
|
private |
Adds a duplicate tuple to the Duplicate Set.
tuple | the duplicate tuple to be added. |
Definition at line 2368 of file olsr-routing-protocol.cc.
References ns3::OlsrState::InsertDuplicateTuple(), and m_state.
Referenced by ForwardDefault().
|
private |
Adds a new entry into the routing table.
If an entry for the given destination existed, it is deleted and freed.
dest | address of the destination node. |
next | address of the next hop node. |
iface | address of the local interface. |
dist | distance to the destination node. |
Definition at line 3246 of file olsr-routing-protocol.cc.
References ns3::olsr::RoutingTableEntry::destAddr, ns3::olsr::RoutingTableEntry::distance, ns3::olsr::RoutingTableEntry::interface, m_mainAddress, m_table, ns3::olsr::RoutingTableEntry::nextAddr, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by AddEntry(), and RoutingTableComputation().
|
private |
Definition at line 3265 of file olsr-routing-protocol.cc.
References AddEntry(), ns3::Ipv4::GetAddress(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Ipv4::GetNAddresses(), ns3::Ipv4::GetNInterfaces(), m_ipv4, m_mainAddress, NS_ASSERT, and NS_LOG_FUNCTION.
void ns3::olsr::RoutingProtocol::AddHostNetworkAssociation | ( | Ipv4Address | networkAddr, |
Ipv4Mask | netmask | ||
) |
Inject Association to be sent in HNA message.
Injects the specified (networkAddr, netmask) tuple in the list of local HNA associations to be sent by the node via HNA messages. If this tuple already exists, nothing is done.
Definition at line 1882 of file olsr-routing-protocol.cc.
References ns3::OlsrState::GetAssociations(), ns3::OlsrState::InsertAssociation(), m_state, ns3::olsr::Association::netmask, ns3::olsr::Association::networkAddr, and NS_LOG_INFO.
Referenced by SetRoutingTableAssociation().
|
private |
Adds an interface association tuple to the Interface Association Set.
tuple | the interface association tuple to be added. |
Definition at line 2651 of file olsr-routing-protocol.cc.
References ns3::OlsrState::InsertIfaceAssocTuple(), and m_state.
Referenced by DoStart(), and ProcessMid().
|
private |
Adds an MPR selector tuple to the MPR Selector Set.
Advertised Neighbor Sequence Number (ANSN) is also updated.
tuple | the MPR selector tuple to be added. |
Definition at line 2579 of file olsr-routing-protocol.cc.
References IncrementAnsn(), ns3::OlsrState::InsertMprSelectorTuple(), and m_state.
Referenced by PopulateMprSelectorSet().
|
private |
Adds a neighbor tuple to the Neighbor Set.
tuple | the neighbor tuple to be added. |
Definition at line 2501 of file olsr-routing-protocol.cc.
References IncrementAnsn(), ns3::OlsrState::InsertNeighborTuple(), and m_state.
Referenced by LinkTupleAdded().
|
private |
Adds a topology tuple to the Topology Set.
tuple | the topology tuple to be added. |
Definition at line 2615 of file olsr-routing-protocol.cc.
References ns3::OlsrState::InsertTopologyTuple(), and m_state.
Referenced by ProcessTc().
|
private |
Adds a 2-hop neighbor tuple to the 2-hop Neighbor Set.
tuple | the 2-hop neighbor tuple to be added. |
Definition at line 2537 of file olsr-routing-protocol.cc.
References ns3::OlsrState::InsertTwoHopNeighborTuple(), and m_state.
Referenced by PopulateTwoHopNeighborSet().
int64_t ns3::olsr::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 3305 of file olsr-routing-protocol.cc.
References m_uniformRandomVariable, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
|
private |
Removes tuple_ if expired. Else timer is rescheduled to expire at tuple_->time().
e | The event which has expired. |
Definition at line 2957 of file olsr-routing-protocol.cc.
References DELAY, ns3::olsr::AssociationTuple::expirationTime, ns3::OlsrState::FindAssociationTuple(), m_events, m_state, ns3::Simulator::Now(), RemoveAssociationTuple(), ns3::Simulator::Schedule(), and ns3::EventGarbageCollector::Track().
Referenced by ProcessHna().
|
private |
Clears the routing table and frees the memory assigned to each one of its entries.
Definition at line 2980 of file olsr-routing-protocol.cc.
References m_table, and NS_LOG_FUNCTION_NOARGS.
Referenced by RoutingTableComputation().
|
private |
This auxiliary function (defined in RFC 3626) is used for calculating the MPR Set.
tuple | the neighbor tuple which has the main address of the node we are going to calculate its degree to. |
Definition at line 515 of file olsr-routing-protocol.cc.
References ns3::OlsrState::FindNeighborTuple(), ns3::OlsrState::GetTwoHopNeighbors(), m_state, ns3::olsr::NeighborTuple::neighborMainAddr, and ns3::olsr::TwoHopNeighborTuple::neighborMainAddr.
Referenced by MprComputation().
|
private |
Definition at line 233 of file olsr-routing-protocol.cc.
References m_hnaRoutingTable, m_ipv4, m_routingTableAssociation, and m_socketAddresses.
|
protectedvirtual |
This method is called only once by Object::Start. If the user calls Object::Start multiple times, DoStart is called only the first time.
Subclasses are expected to override this method and chain up to their parent's implementation once they are done. It is safe to call GetObject and AggregateObject from within this method.
Reimplemented from ns3::Object.
Definition at line 276 of file olsr-routing-protocol.cc.
References AddIfaceAssocTuple(), ns3::Socket::Bind(), ns3::Socket::BindToNetDevice(), ns3::Socket::CreateSocket(), ns3::Ipv4::GetAddress(), ns3::Ipv4InterfaceAddress::GetLocal(), GetMainAddress(), ns3::Ipv4::GetNetDevice(), ns3::Ipv4::GetNInterfaces(), ns3::UdpSocketFactory::GetTypeId(), HelloTimerExpire(), HnaTimerExpire(), ns3::olsr::IfaceAssocTuple::ifaceAddr, m_interfaceExclusions, m_ipv4, m_mainAddress, m_socketAddresses, ns3::olsr::IfaceAssocTuple::mainAddr, ns3::MakeCallback(), MidTimerExpire(), NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, OLSR_PORT_NUMBER, RecvOlsr(), ns3::Socket::SetAllowBroadcast(), ns3::Socket::SetRecvCallback(), and TcTimerExpire().
void ns3::olsr::RoutingProtocol::Dump | ( | void | ) |
Dump the neighbor table, two-hop neighbor table, and routing table to logging output (NS_LOG_DEBUG log level). If logging is disabled, this function does nothing.
Definition at line 3328 of file olsr-routing-protocol.cc.
References ns3::OlsrState::GetNeighbors(), ns3::OlsrState::GetTwoHopNeighbors(), m_mainAddress, m_state, m_table, ns3::Now(), and NS_LOG_DEBUG.
|
private |
Removes tuple if expired. Else timer is rescheduled to expire at tuple.expirationTime.
The task of actually removing the tuple is left to the OLSR agent.
tuple | The tuple which has expired. |
Definition at line 2782 of file olsr-routing-protocol.cc.
References DELAY, ns3::olsr::DuplicateTuple::expirationTime, ns3::OlsrState::FindDuplicateTuple(), m_events, m_state, ns3::Simulator::Now(), RemoveDuplicateTuple(), ns3::Simulator::Schedule(), and ns3::EventGarbageCollector::Track().
Referenced by ForwardDefault().
|
private |
Finds the appropiate entry which must be used in order to forward a data packet to a next hop (given a destination).
Imagine a routing table like this: [A,B] [B,C] [C,C]; being each pair of the form [dest addr,next-hop addr]. In this case, if this function is invoked with [A,B] then pair [C,C] is returned because C is the next hop that must be used to forward a data packet destined to A. That is, C is a neighbor of this node, but B isn't. This function finds the appropiate neighbor for forwarding a packet.
entry | the routing table entry which indicates the destination node we are interested in. |
Definition at line 3033 of file olsr-routing-protocol.cc.
References ns3::olsr::RoutingTableEntry::destAddr, Lookup(), and ns3::olsr::RoutingTableEntry::nextAddr.
Referenced by RouteInput(), and RouteOutput().
|
private |
OLSR's default forwarding algorithm.
See RFC 3626 for details.
p | the OLSR packet which has been received. |
msg | the OLSR message which must be forwarded. |
dup_tuple | NULL if the message has never been considered for forwarding, or a duplicate tuple in other case. |
local_iface | the address of the interface where the message was received from. |
Definition at line 1506 of file olsr-routing-protocol.cc.
References AddDuplicateTuple(), ns3::olsr::DuplicateTuple::address, DupTupleTimerExpire(), ns3::olsr::DuplicateTuple::expirationTime, ns3::OlsrState::FindMprSelectorTuple(), ns3::OlsrState::FindSymLinkTuple(), ns3::olsr::MessageHeader::GetHopCount(), GetMainAddress(), ns3::olsr::MessageHeader::GetMessageSequenceNumber(), ns3::olsr::MessageHeader::GetOriginatorAddress(), ns3::olsr::MessageHeader::GetTimeToLive(), ns3::olsr::DuplicateTuple::ifaceList, JITTER, m_mainAddress, m_state, ns3::Now(), ns3::Simulator::Now(), NS_LOG_LOGIC, OLSR_DUP_HOLD_TIME, QueueMessage(), ns3::olsr::DuplicateTuple::retransmitted, ns3::Simulator::Schedule(), ns3::olsr::DuplicateTuple::sequenceNumber, ns3::olsr::MessageHeader::SetHopCount(), and ns3::olsr::MessageHeader::SetTimeToLive().
Referenced by RecvOlsr().
|
inline |
Definition at line 121 of file olsr-routing-protocol.h.
References m_interfaceExclusions.
|
private |
Gets the main address associated with a given interface address.
iface_addr | the interface address. |
Definition at line 861 of file olsr-routing-protocol.cc.
References ns3::OlsrState::FindIfaceAssocTuple(), m_state, and ns3::olsr::IfaceAssocTuple::mainAddr.
Referenced by DoStart(), ForwardDefault(), LinkTupleAdded(), LinkTupleUpdated(), NeighborLoss(), PopulateMprSelectorSet(), PopulateTwoHopNeighborSet(), ProcessMid(), RemoveLinkTuple(), RoutingTableComputation(), and SendHello().
|
inlineprivate |
Increments message sequence number and returns the new value.
Definition at line 2710 of file olsr-routing-protocol.cc.
References m_messageSequenceNumber, and OLSR_MAX_SEQ_NUM.
Referenced by SendHello(), SendHna(), SendMid(), and SendTc().
|
inlineprivate |
Increments packet sequence number and returns the new value.
Definition at line 2703 of file olsr-routing-protocol.cc.
References m_packetSequenceNumber, and OLSR_MAX_SEQ_NUM.
Referenced by SendPacket().
std::vector< RoutingTableEntry > ns3::olsr::RoutingProtocol::GetRoutingTableEntries | ( | ) | const |
Return the list of routing table entries discovered by OLSR
Definition at line 3293 of file olsr-routing-protocol.cc.
References m_table.
|
inlineprivate |
Definition at line 168 of file olsr-routing-protocol.h.
References m_table.
Referenced by RoutingTableComputation().
|
static |
This method returns the TypeId associated to ns3::olsr::RoutingProtocol.
This object is accessible through the following paths with Config::Set and Config::Connect:
Attributes defined for this type:
TraceSources defined for this type:
Reimplemented from ns3::Ipv4RoutingProtocol.
Definition at line 152 of file olsr-routing-protocol.cc.
References m_helloInterval, m_hnaInterval, m_midInterval, m_routingTableChanged, m_rxPacketTrace, m_tcInterval, m_txPacketTrace, m_willingness, ns3::MakeEnumAccessor(), ns3::MakeEnumChecker(), ns3::MakeTraceSourceAccessor(), OLSR_WILL_ALWAYS, OLSR_WILL_DEFAULT, OLSR_WILL_HIGH, OLSR_WILL_LOW, OLSR_WILL_NEVER, ns3::Seconds(), and ns3::TypeId::SetParent().
|
private |
Sends a HELLO message and reschedules the HELLO timer.
e | The event which has expired. |
Definition at line 2722 of file olsr-routing-protocol.cc.
References m_helloInterval, m_helloTimer, ns3::Timer::Schedule(), and SendHello().
Referenced by DoStart(), and SetIpv4().
|
private |
Sends an HNA message (if the node has associated hosts/networks) and reschedules the HNA timer.
Definition at line 2761 of file olsr-routing-protocol.cc.
References ns3::OlsrState::GetAssociations(), m_hnaInterval, m_hnaTimer, m_state, NS_LOG_DEBUG, ns3::Timer::Schedule(), and SendHna().
Referenced by DoStart(), and SetIpv4().
|
private |
Removes tuple_ if expired. Else timer is rescheduled to expire at tuple_->time().
e | The event which has expired. |
Definition at line 2934 of file olsr-routing-protocol.cc.
References DELAY, ns3::OlsrState::FindIfaceAssocTuple(), m_events, m_state, ns3::Simulator::Now(), RemoveIfaceAssocTuple(), ns3::Simulator::Schedule(), ns3::olsr::IfaceAssocTuple::time, and ns3::EventGarbageCollector::Track().
Referenced by ProcessMid().
|
private |
Definition at line 2566 of file olsr-routing-protocol.cc.
References m_ansn, and OLSR_MAX_SEQ_NUM.
Referenced by AddMprSelectorTuple(), AddNeighborTuple(), RemoveMprSelectorTuple(), and RemoveNeighborTuple().
|
private |
Check that address is one of my interfaces.
Definition at line 3313 of file olsr-routing-protocol.cc.
References ns3::Ipv4InterfaceAddress::GetLocal(), and m_socketAddresses.
Referenced by RouteInput().
|
private |
Updates Link Set according to a new received HELLO message (following RFC 3626 specification). Neighbor Set is also updated if needed.
Definition at line 1987 of file olsr-routing-protocol.cc.
References DELAY, ns3::OlsrState::FindLinkTuple(), ns3::Time::GetSeconds(), ns3::olsr::MessageHeader::GetVTime(), ns3::OlsrState::InsertLinkTuple(), ns3::olsr::MessageHeader::Hello::linkMessages, LinkTupleAdded(), LinkTupleTimerExpire(), LinkTupleUpdated(), ns3::olsr::LinkTuple::localIfaceAddr, m_events, m_mainAddress, m_state, ns3::olsr::LinkTuple::neighborIfaceAddr, ns3::Now(), NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_LOGIC, OLSR_ASYM_LINK, OLSR_LOST_LINK, OLSR_MPR_NEIGH, OLSR_NEIGHB_HOLD_TIME, OLSR_NOT_NEIGH, OLSR_SYM_LINK, OLSR_SYM_NEIGH, OLSR_UNSPEC_LINK, ns3::Simulator::Schedule(), ns3::Seconds(), ns3::olsr::LinkTuple::symTime, ns3::olsr::LinkTuple::time, ns3::EventGarbageCollector::Track(), and ns3::olsr::MessageHeader::Hello::willingness.
Referenced by ProcessHello().
|
private |
Definition at line 2395 of file olsr-routing-protocol.cc.
References AddNeighborTuple(), GetMainAddress(), ns3::olsr::LinkTuple::neighborIfaceAddr, ns3::olsr::NeighborTuple::neighborMainAddr, ns3::Simulator::Now(), ns3::olsr::NeighborTuple::status, ns3::olsr::NeighborTuple::STATUS_NOT_SYM, ns3::olsr::NeighborTuple::STATUS_SYM, ns3::olsr::LinkTuple::symTime, and ns3::olsr::NeighborTuple::willingness.
Referenced by LinkSensing(), and LinkTupleUpdated().
|
private |
Removes tuple_ if expired. Else if symmetric time has expired then it is assumed a neighbor loss and agent_->nb_loss() is called. In this case the timer is rescheduled to expire at tuple_->time(). Otherwise the timer is rescheduled to expire at the minimum between tuple_->time() and tuple_->sym_time().
The task of actually removing the tuple is left to the OLSR agent.
e | The event which has expired. |
Definition at line 2814 of file olsr-routing-protocol.cc.
References DELAY, ns3::OlsrState::FindLinkTuple(), m_events, m_linkTupleTimerFirstTime, m_state, NeighborLoss(), ns3::Now(), RemoveLinkTuple(), ns3::Simulator::Schedule(), ns3::olsr::LinkTuple::symTime, ns3::olsr::LinkTuple::time, and ns3::EventGarbageCollector::Track().
Referenced by LinkSensing().
|
private |
This function is invoked when a link tuple is updated. Its aim is to also update the corresponding neighbor tuple if it is needed.
tuple | the link tuple which has been updated. |
Definition at line 2438 of file olsr-routing-protocol.cc.
References ns3::OlsrState::FindNeighborTuple(), ns3::OlsrState::GetLinks(), GetMainAddress(), LinkTupleAdded(), m_mainAddress, m_state, ns3::olsr::LinkTuple::neighborIfaceAddr, ns3::olsr::NeighborTuple::neighborMainAddr, ns3::Now(), ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_WARN, ns3::olsr::NeighborTuple::status, ns3::olsr::NeighborTuple::STATUS_NOT_SYM, ns3::olsr::NeighborTuple::STATUS_SYM, and ns3::olsr::LinkTuple::symTime.
Referenced by LinkSensing(), and NeighborLoss().
|
private |
Looks up an entry for the specified destination address.
dest | destination address. |
outEntry | output parameter to hold the routing entry result, if fuond |
Definition at line 3003 of file olsr-routing-protocol.cc.
References m_table.
Referenced by FindSendEntry(), RouteInput(), RouteOutput(), and RoutingTableComputation().
|
private |
Sends a MID message (if the node has more than one interface) and resets the MID timer.
e | The event which has expired. |
Definition at line 2751 of file olsr-routing-protocol.cc.
References m_midInterval, m_midTimer, ns3::Timer::Schedule(), and SendMid().
Referenced by DoStart(), and SetIpv4().
|
private |
Computates MPR set of a node following RFC 3626 hints.
Definition at line 568 of file olsr-routing-protocol.cc.
References ns3::olsr::anonymous_namespace{olsr-routing-protocol.cc}::CoverTwoHopNeighbors(), Degree(), ns3::OlsrState::GetNeighbors(), ns3::OlsrState::GetTwoHopNeighbors(), m_mainAddress, m_state, ns3::olsr::NeighborTuple::neighborMainAddr, ns3::olsr::TwoHopNeighborTuple::neighborMainAddr, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC, OLSR_WILL_ALWAYS, OLSR_WILL_NEVER, ns3::OlsrState::SetMprSet(), ns3::olsr::NeighborTuple::STATUS_SYM, and ns3::olsr::NeighborTuple::willingness.
Referenced by NeighborLoss(), and ProcessHello().
|
private |
Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
The task of actually removing the tuple is left to the OLSR agent.
e | The event which has expired. |
Definition at line 2883 of file olsr-routing-protocol.cc.
References DELAY, ns3::olsr::MprSelectorTuple::expirationTime, ns3::OlsrState::FindMprSelectorTuple(), m_events, m_state, ns3::Simulator::Now(), RemoveMprSelectorTuple(), ns3::Simulator::Schedule(), and ns3::EventGarbageCollector::Track().
Referenced by PopulateMprSelectorSet().
|
private |
Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
The task of actually removing the tuple is left to the OLSR agent.
e | The event which has expired. |
Definition at line 2855 of file olsr-routing-protocol.cc.
References DELAY, ns3::olsr::TwoHopNeighborTuple::expirationTime, ns3::OlsrState::FindTwoHopNeighborTuple(), m_events, m_state, ns3::Simulator::Now(), RemoveTwoHopNeighborTuple(), ns3::Simulator::Schedule(), and ns3::EventGarbageCollector::Track().
Referenced by PopulateTwoHopNeighborSet().
|
private |
Performs all actions needed when a neighbor loss occurs.
Neighbor Set, 2-hop Neighbor Set, MPR Set and MPR Selector Set are updated.
tuple | link tuple with the information of the link to the neighbor which has been lost. |
Definition at line 2349 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseMprSelectorTuples(), ns3::OlsrState::EraseTwoHopNeighborTuples(), GetMainAddress(), LinkTupleUpdated(), m_mainAddress, m_state, MprComputation(), ns3::olsr::LinkTuple::neighborIfaceAddr, ns3::Simulator::Now(), NS_LOG_DEBUG, OLSR_WILL_DEFAULT, and RoutingTableComputation().
Referenced by LinkTupleTimerExpire().
|
privatevirtual |
Definition at line 3228 of file olsr-routing-protocol.cc.
|
privatevirtual |
Definition at line 3225 of file olsr-routing-protocol.cc.
|
privatevirtual |
Definition at line 3222 of file olsr-routing-protocol.cc.
|
privatevirtual |
Definition at line 3231 of file olsr-routing-protocol.cc.
|
private |
Updates the MPR Selector Set according to the information contained in a new received HELLO message (following RFC 3626).
Definition at line 2249 of file olsr-routing-protocol.cc.
References AddMprSelectorTuple(), DELAY, ns3::olsr::MprSelectorTuple::expirationTime, ns3::OlsrState::FindMprSelectorTuple(), GetMainAddress(), ns3::olsr::MessageHeader::GetOriginatorAddress(), ns3::olsr::MessageHeader::GetVTime(), ns3::olsr::MessageHeader::Hello::linkMessages, m_events, m_mainAddress, m_state, ns3::olsr::MprSelectorTuple::mainAddr, MprSelTupleTimerExpire(), ns3::Now(), NS_LOG_DEBUG, NS_LOG_FUNCTION, OLSR_MPR_NEIGH, ns3::OlsrState::PrintMprSelectorSet(), ns3::Simulator::Schedule(), and ns3::EventGarbageCollector::Track().
Referenced by ProcessHello().
|
private |
Updates the Neighbor Set according to the information contained in a new received HELLO message (following RFC 3626).
Definition at line 2122 of file olsr-routing-protocol.cc.
References ns3::OlsrState::FindNeighborTuple(), ns3::olsr::MessageHeader::GetOriginatorAddress(), m_state, ns3::olsr::NeighborTuple::willingness, and ns3::olsr::MessageHeader::Hello::willingness.
Referenced by ProcessHello().
|
private |
Updates the 2-hop Neighbor Set according to the information contained in a new received HELLO message (following RFC 3626).
Definition at line 2137 of file olsr-routing-protocol.cc.
References AddTwoHopNeighborTuple(), DELAY, ns3::OlsrState::EraseTwoHopNeighborTuples(), ns3::olsr::TwoHopNeighborTuple::expirationTime, ns3::OlsrState::FindTwoHopNeighborTuple(), ns3::OlsrState::GetLinks(), GetMainAddress(), ns3::olsr::MessageHeader::GetOriginatorAddress(), ns3::olsr::MessageHeader::GetVTime(), ns3::olsr::MessageHeader::Hello::linkMessages, m_events, m_mainAddress, m_state, Nb2hopTupleTimerExpire(), ns3::olsr::TwoHopNeighborTuple::neighborMainAddr, ns3::Now(), NS_LOG_DEBUG, NS_LOG_LOGIC, OLSR_MPR_NEIGH, OLSR_NOT_NEIGH, OLSR_SYM_NEIGH, ns3::Simulator::Schedule(), ns3::EventGarbageCollector::Track(), and ns3::olsr::TwoHopNeighborTuple::twoHopNeighborAddr.
Referenced by ProcessHello().
|
privatevirtual |
Definition at line 250 of file olsr-routing-protocol.cc.
References ns3::Names::FindName(), ns3::Ipv4::GetNetDevice(), ns3::OutputStreamWrapper::GetStream(), m_hnaRoutingTable, m_ipv4, m_table, and ns3::Ipv4StaticRouting::PrintRoutingTable().
|
private |
Processes a HELLO message following RFC 3626 specification.
Link sensing and population of the Neighbor Set, 2-hop Neighbor Set and MPR Selector Set are performed.
msg | the OLSR message which contains the HELLO message. |
receiver_iface | the address of the interface where the message was received from. |
sender_iface | the address of the interface where the message was sent from. |
Definition at line 1201 of file olsr-routing-protocol.cc.
References ns3::olsr::MessageHeader::GetHello(), ns3::OlsrState::GetLinks(), ns3::OlsrState::GetNeighbors(), ns3::OlsrState::GetTwoHopNeighbors(), LinkSensing(), m_mainAddress, m_state, MprComputation(), ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_FUNCTION, PopulateMprSelectorSet(), PopulateNeighborSet(), and PopulateTwoHopNeighborSet().
Referenced by RecvOlsr().
|
private |
Processes a HNA message following RFC 3626 specification.
The Host Network Association Set is updated (if needed) with the information of the received HNA message.
msg | the OLSR message which contains the HNA message. |
sender_iface | the address of the interface where the message was sent from. |
Definition at line 1438 of file olsr-routing-protocol.cc.
References AddAssociationTuple(), ns3::olsr::MessageHeader::Hna::associations, AssociationTupleTimerExpire(), DELAY, ns3::olsr::AssociationTuple::expirationTime, ns3::OlsrState::FindAssociationTuple(), ns3::OlsrState::FindSymLinkTuple(), ns3::olsr::AssociationTuple::gatewayAddr, ns3::olsr::MessageHeader::GetHna(), ns3::olsr::MessageHeader::GetOriginatorAddress(), ns3::olsr::MessageHeader::GetVTime(), m_state, ns3::olsr::AssociationTuple::netmask, ns3::olsr::AssociationTuple::networkAddr, ns3::Now(), and ns3::Simulator::Schedule().
Referenced by RecvOlsr().
|
private |
Processes a MID message following RFC 3626 specification.
The Interface Association Set is updated (if needed) with the information of the received MID message.
msg | the OLSR message which contains the MID message. |
sender_iface | the address of the interface where the message was sent from. |
Definition at line 1359 of file olsr-routing-protocol.cc.
References AddIfaceAssocTuple(), DELAY, ns3::OlsrState::FindSymLinkTuple(), ns3::OlsrState::GetIfaceAssocSetMutable(), GetMainAddress(), ns3::olsr::MessageHeader::GetMid(), ns3::OlsrState::GetNeighbors(), ns3::olsr::MessageHeader::GetOriginatorAddress(), ns3::OlsrState::GetTwoHopNeighbors(), ns3::olsr::MessageHeader::GetVTime(), ns3::olsr::IfaceAssocTuple::ifaceAddr, IfaceAssocTupleTimerExpire(), ns3::olsr::MessageHeader::Mid::interfaceAddresses, m_mainAddress, m_state, ns3::olsr::IfaceAssocTuple::mainAddr, ns3::Now(), NS_LOG_DEBUG, NS_LOG_LOGIC, ns3::Simulator::Schedule(), and ns3::olsr::IfaceAssocTuple::time.
Referenced by RecvOlsr().
|
private |
Processes a TC message following RFC 3626 specification.
The Topology Set is updated (if needed) with the information of the received TC message.
msg | the OLSR message which contains the TC message. |
sender_iface | the address of the interface where the message was sent from. |
Definition at line 1264 of file olsr-routing-protocol.cc.
References AddTopologyTuple(), ns3::olsr::MessageHeader::Tc::ansn, DELAY, ns3::olsr::TopologyTuple::destAddr, ns3::OlsrState::EraseOlderTopologyTuples(), ns3::olsr::TopologyTuple::expirationTime, ns3::OlsrState::FindNewerTopologyTuple(), ns3::OlsrState::FindSymLinkTuple(), ns3::OlsrState::FindTopologyTuple(), ns3::olsr::MessageHeader::GetOriginatorAddress(), ns3::olsr::MessageHeader::GetTc(), ns3::OlsrState::GetTopologySet(), ns3::olsr::MessageHeader::GetVTime(), ns3::olsr::TopologyTuple::lastAddr, m_events, m_mainAddress, m_state, ns3::olsr::MessageHeader::Tc::neighborAddresses, ns3::Now(), ns3::Simulator::Now(), NS_LOG_DEBUG, ns3::Simulator::Schedule(), ns3::olsr::TopologyTuple::sequenceNumber, TopologyTupleTimerExpire(), and ns3::EventGarbageCollector::Track().
Referenced by RecvOlsr().
|
private |
Enques an OLSR message which will be sent with a delay of (0, delay].
This buffering system is used in order to piggyback several OLSR messages in a same OLSR packet.
msg | the OLSR message which must be sent. |
delay | maximum delay the OLSR message is going to be buffered. |
Definition at line 1581 of file olsr-routing-protocol.cc.
References ns3::Timer::IsRunning(), m_queuedMessages, m_queuedMessagesTimer, ns3::Timer::Schedule(), and ns3::Timer::SetDelay().
Referenced by ForwardDefault(), SendHello(), SendHna(), SendMid(), and SendTc().
Definition at line 361 of file olsr-routing-protocol.cc.
References ns3::InetSocketAddress::ConvertFrom(), ns3::OlsrState::FindDuplicateTuple(), ForwardDefault(), ns3::InetSocketAddress::GetIpv4(), ns3::olsr::MessageHeader::GetMessageSequenceNumber(), ns3::olsr::MessageHeader::GetMessageType(), ns3::olsr::MessageHeader::GetOriginatorAddress(), ns3::olsr::PacketHeader::GetPacketLength(), ns3::InetSocketAddress::GetPort(), ns3::olsr::PacketHeader::GetSerializedSize(), ns3::olsr::MessageHeader::GetSerializedSize(), ns3::olsr::MessageHeader::GetTimeToLive(), ns3::olsr::MessageHeader::HELLO_MESSAGE, ns3::olsr::MessageHeader::HNA_MESSAGE, ns3::olsr::DuplicateTuple::ifaceList, m_mainAddress, m_rxPacketTrace, m_socketAddresses, m_state, ns3::olsr::MessageHeader::MID_MESSAGE, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, OLSR_PORT_NUMBER, ProcessHello(), ProcessHna(), ProcessMid(), ProcessTc(), ns3::Socket::RecvFrom(), RoutingTableComputation(), and ns3::olsr::MessageHeader::TC_MESSAGE.
Referenced by DoStart().
|
private |
Removes a host network association tuple from the Association Set.
tuple | the host network association tuple to be removed. |
Definition at line 2696 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseAssociationTuple(), and m_state.
Referenced by AssociationTupleTimerExpire().
|
private |
Removes a duplicate tuple from the Duplicate Set.
tuple | the duplicate tuple to be removed. |
Definition at line 2384 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseDuplicateTuple(), and m_state.
Referenced by DupTupleTimerExpire().
|
private |
Deletes the entry whose destination address is given.
dest | address of the destination node. |
Definition at line 2991 of file olsr-routing-protocol.cc.
References m_table.
void ns3::olsr::RoutingProtocol::RemoveHostNetworkAssociation | ( | Ipv4Address | networkAddr, |
Ipv4Mask | netmask | ||
) |
Removes Association sent in HNA message.
Removes the specified (networkAddr, netmask) tuple from the list of local HNA associations to be sent by the node via HNA messages. If this tuple does not exist, nothing is done (see "OlsrState::EraseAssociation()").
Definition at line 1908 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseAssociation(), m_state, and NS_LOG_INFO.
Referenced by SetRoutingTableAssociation().
|
private |
Removes an interface association tuple from the Interface Association Set.
tuple | the interface association tuple to be removed. |
Definition at line 2668 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseIfaceAssocTuple(), and m_state.
Referenced by IfaceAssocTupleTimerExpire().
|
private |
Removes a link tuple from the Link Set.
tuple | the link tuple to be removed. |
Definition at line 2420 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseLinkTuple(), ns3::OlsrState::EraseNeighborTuple(), GetMainAddress(), m_mainAddress, m_state, ns3::olsr::LinkTuple::neighborIfaceAddr, ns3::Simulator::Now(), and NS_LOG_DEBUG.
Referenced by LinkTupleTimerExpire().
|
private |
Removes an MPR selector tuple from the MPR Selector Set.
Advertised Neighbor Sequence Number (ANSN) is also updated.
tuple | the MPR selector tuple to be removed. |
Definition at line 2598 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseMprSelectorTuple(), IncrementAnsn(), and m_state.
Referenced by MprSelTupleTimerExpire().
|
private |
Removes a neighbor tuple from the Neighbor Set.
tuple | the neighbor tuple to be removed. |
Definition at line 2519 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseNeighborTuple(), IncrementAnsn(), and m_state.
|
private |
Removes a topology tuple from the Topology Set.
tuple | the topology tuple to be removed. |
Definition at line 2633 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseTopologyTuple(), and m_state.
Referenced by TopologyTupleTimerExpire().
|
private |
Removes a 2-hop neighbor tuple from the 2-hop Neighbor Set.
tuple | the 2-hop neighbor tuple to be removed. |
Definition at line 2554 of file olsr-routing-protocol.cc.
References ns3::OlsrState::EraseTwoHopNeighborTuple(), and m_state.
Referenced by Nb2hopTupleTimerExpire().
|
privatevirtual |
Definition at line 3120 of file olsr-routing-protocol.cc.
References FindSendEntry(), ns3::Ipv4::GetAddress(), ns3::Ipv4Header::GetDestination(), ns3::Node::GetId(), ns3::Ipv4::GetInterfaceForDevice(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Ipv4::GetNAddresses(), ns3::Ipv4::GetNetDevice(), ns3::Object::GetObject(), ns3::Ipv4Header::GetSource(), ns3::olsr::RoutingTableEntry::interface, ns3::Ipv4::IsDestinationAddress(), IsMyOwnAddress(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), Lookup(), m_hnaRoutingTable, m_ipv4, m_mainAddress, m_table, ns3::olsr::RoutingTableEntry::nextAddr, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Ipv4StaticRouting::RouteInput(), ns3::Ipv4Route::SetDestination(), ns3::Ipv4Route::SetGateway(), ns3::Ipv4Route::SetOutputDevice(), and ns3::Ipv4Route::SetSource().
|
privatevirtual |
Definition at line 3046 of file olsr-routing-protocol.cc.
References ns3::Socket::ERROR_NOROUTETOHOST, ns3::Socket::ERROR_NOTERROR, FindSendEntry(), ns3::Ipv4::GetAddress(), ns3::Ipv4Header::GetDestination(), ns3::Node::GetId(), ns3::Ipv4::GetInterfaceForDevice(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Ipv4::GetNAddresses(), ns3::Ipv4::GetNetDevice(), ns3::Object::GetObject(), ns3::olsr::RoutingTableEntry::interface, Lookup(), m_hnaRoutingTable, m_ipv4, m_mainAddress, ns3::olsr::RoutingTableEntry::nextAddr, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::Ipv4StaticRouting::RouteOutput().
|
private |
Creates the routing table of the node following RFC 3626 hints.
Definition at line 876 of file olsr-routing-protocol.cc.
References AddEntry(), ns3::Ipv4StaticRouting::AddNetworkRouteTo(), Clear(), ns3::olsr::TopologyTuple::destAddr, ns3::olsr::RoutingTableEntry::distance, ns3::OlsrState::FindSymNeighborTuple(), ns3::olsr::AssociationTuple::gatewayAddr, ns3::OlsrState::GetAssociations(), ns3::OlsrState::GetAssociationSet(), ns3::Ipv4RoutingTableEntry::GetDestNetwork(), ns3::Ipv4RoutingTableEntry::GetDestNetworkMask(), ns3::OlsrState::GetIfaceAssocSet(), ns3::OlsrState::GetLinks(), GetMainAddress(), ns3::Ipv4StaticRouting::GetMetric(), ns3::OlsrState::GetNeighbors(), ns3::Ipv4StaticRouting::GetNRoutes(), ns3::Ipv4StaticRouting::GetRoute(), GetSize(), ns3::OlsrState::GetTopologySet(), ns3::OlsrState::GetTwoHopNeighbors(), ns3::olsr::IfaceAssocTuple::ifaceAddr, ns3::olsr::RoutingTableEntry::interface, ns3::olsr::TopologyTuple::lastAddr, ns3::olsr::LinkTuple::localIfaceAddr, Lookup(), m_hnaRoutingTable, m_mainAddress, m_routingTableChanged, m_state, ns3::olsr::IfaceAssocTuple::mainAddr, ns3::olsr::LinkTuple::neighborIfaceAddr, ns3::olsr::NeighborTuple::neighborMainAddr, ns3::olsr::TwoHopNeighborTuple::neighborMainAddr, ns3::olsr::Association::netmask, ns3::olsr::AssociationTuple::netmask, ns3::olsr::Association::networkAddr, ns3::olsr::AssociationTuple::networkAddr, ns3::olsr::RoutingTableEntry::nextAddr, ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_LOGIC, OLSR_WILL_NEVER, ns3::Ipv4StaticRouting::RemoveRoute(), ns3::olsr::NeighborTuple::status, ns3::olsr::NeighborTuple::STATUS_SYM, ns3::olsr::LinkTuple::time, and ns3::olsr::TwoHopNeighborTuple::twoHopNeighborAddr.
Referenced by NeighborLoss(), and RecvOlsr().
|
private |
Creates a new OLSR HELLO message which is buffered for being sent later on.
Definition at line 1662 of file olsr-routing-protocol.cc.
References ns3::OlsrState::FindMprAddress(), ns3::OlsrState::FindNeighborInterfaces(), ns3::olsr::MessageHeader::GetHello(), ns3::OlsrState::GetLinks(), GetMainAddress(), GetMessageSequenceNumber(), ns3::OlsrState::GetNeighbors(), ns3::olsr::MessageHeader::GetSerializedSize(), JITTER, ns3::olsr::MessageHeader::Hello::LinkMessage::linkCode, ns3::olsr::MessageHeader::Hello::linkMessages, m_helloInterval, m_mainAddress, m_state, m_willingness, ns3::olsr::MessageHeader::Hello::LinkMessage::neighborInterfaceAddresses, ns3::Now(), NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_WARN, OLSR_ASYM_LINK, OLSR_LOST_LINK, OLSR_MPR_NEIGH, OLSR_NEIGHB_HOLD_TIME, OLSR_NOT_NEIGH, OLSR_SYM_LINK, OLSR_SYM_NEIGH, QueueMessage(), ns3::olsr::MessageHeader::SetHopCount(), ns3::olsr::MessageHeader::Hello::SetHTime(), ns3::olsr::MessageHeader::SetMessageSequenceNumber(), ns3::olsr::MessageHeader::SetOriginatorAddress(), ns3::olsr::MessageHeader::SetTimeToLive(), ns3::olsr::MessageHeader::SetVTime(), ns3::olsr::NeighborTuple::STATUS_NOT_SYM, ns3::olsr::NeighborTuple::STATUS_SYM, and ns3::olsr::MessageHeader::Hello::willingness.
Referenced by HelloTimerExpire().
|
private |
Creates a new OLSR HNA message which is buffered for being sent later on.
Definition at line 1844 of file olsr-routing-protocol.cc.
References ns3::olsr::MessageHeader::Hna::associations, ns3::OlsrState::GetAssociations(), ns3::olsr::MessageHeader::GetHna(), GetMessageSequenceNumber(), JITTER, m_mainAddress, m_state, OLSR_HNA_HOLD_TIME, QueueMessage(), ns3::olsr::MessageHeader::SetHopCount(), ns3::olsr::MessageHeader::SetMessageSequenceNumber(), ns3::olsr::MessageHeader::SetOriginatorAddress(), ns3::olsr::MessageHeader::SetTimeToLive(), and ns3::olsr::MessageHeader::SetVTime().
Referenced by HnaTimerExpire().
|
private |
Creates a new OLSR MID message which is buffered for being sent later on.
Definition at line 1800 of file olsr-routing-protocol.cc.
References ns3::Ipv4::GetAddress(), ns3::Ipv4InterfaceAddress::GetLocal(), GetMessageSequenceNumber(), ns3::olsr::MessageHeader::GetMid(), ns3::Ipv4::GetNInterfaces(), ns3::olsr::MessageHeader::Mid::interfaceAddresses, JITTER, m_interfaceExclusions, m_ipv4, m_mainAddress, OLSR_MID_HOLD_TIME, QueueMessage(), ns3::olsr::MessageHeader::SetHopCount(), ns3::olsr::MessageHeader::SetMessageSequenceNumber(), ns3::olsr::MessageHeader::SetOriginatorAddress(), ns3::olsr::MessageHeader::SetTimeToLive(), and ns3::olsr::MessageHeader::SetVTime().
Referenced by MidTimerExpire().
|
private |
Definition at line 1592 of file olsr-routing-protocol.cc.
References ns3::Packet::AddHeader(), GetPacketSequenceNumber(), ns3::olsr::PacketHeader::GetSerializedSize(), ns3::Packet::GetSize(), ns3::Ipv4Address::GetSubnetDirectedBroadcast(), m_mainAddress, m_socketAddresses, m_txPacketTrace, NS_LOG_DEBUG, OLSR_PORT_NUMBER, ns3::olsr::PacketHeader::SetPacketLength(), and ns3::olsr::PacketHeader::SetPacketSequenceNumber().
Referenced by SendQueuedMessages().
|
private |
Creates as many OLSR packets as needed in order to send all buffered OLSR messages.
Maximum number of messages which can be contained in an OLSR packet is dictated by OLSR_MAX_MSGS constant.
Definition at line 1623 of file olsr-routing-protocol.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::AddHeader(), ns3::Packet::GetSize(), m_mainAddress, m_queuedMessages, NS_LOG_DEBUG, OLSR_MAX_MSGS, and SendPacket().
Referenced by SetIpv4().
|
private |
Creates a new OLSR TC message which is buffered for being sent later on.
Definition at line 1773 of file olsr-routing-protocol.cc.
References ns3::olsr::MessageHeader::Tc::ansn, GetMessageSequenceNumber(), ns3::OlsrState::GetMprSelectors(), ns3::olsr::MessageHeader::GetTc(), JITTER, m_ansn, m_mainAddress, m_state, ns3::olsr::MessageHeader::Tc::neighborAddresses, NS_LOG_FUNCTION, OLSR_TOP_HOLD_TIME, QueueMessage(), ns3::olsr::MessageHeader::SetHopCount(), ns3::olsr::MessageHeader::SetMessageSequenceNumber(), ns3::olsr::MessageHeader::SetOriginatorAddress(), ns3::olsr::MessageHeader::SetTimeToLive(), and ns3::olsr::MessageHeader::SetVTime().
Referenced by TcTimerExpire().
void ns3::olsr::RoutingProtocol::SetInterfaceExclusions | ( | std::set< uint32_t > | exceptions | ) |
Definition at line 353 of file olsr-routing-protocol.cc.
References m_interfaceExclusions.
Definition at line 211 of file olsr-routing-protocol.cc.
References HelloTimerExpire(), HnaTimerExpire(), m_ansn, m_helloTimer, m_hnaRoutingTable, m_hnaTimer, m_ipv4, m_linkTupleTimerFirstTime, m_messageSequenceNumber, m_midTimer, m_packetSequenceNumber, m_queuedMessagesTimer, m_tcTimer, MidTimerExpire(), NS_ASSERT, NS_LOG_DEBUG, OLSR_MAX_SEQ_NUM, SendQueuedMessages(), ns3::Timer::SetFunction(), ns3::Ipv4StaticRouting::SetIpv4(), and TcTimerExpire().
void ns3::olsr::RoutingProtocol::SetMainInterface | ( | uint32_t | interface | ) |
Set the OLSR main address to the first address on the indicated interface.
interface | IPv4 interface index |
Definition at line 348 of file olsr-routing-protocol.cc.
References ns3::Ipv4::GetAddress(), ns3::Ipv4InterfaceAddress::GetLocal(), m_ipv4, and m_mainAddress.
void ns3::olsr::RoutingProtocol::SetRoutingTableAssociation | ( | Ptr< Ipv4StaticRouting > | routingTable | ) |
Inject Associations from an Ipv4StaticRouting instance.
Associates the specified Ipv4StaticRouting routing table to the OLSR routing protocol. Entries from this associated routing table that use non-olsr outgoing interfaces are added to the list of local HNA associations so that they are included in HNA messages sent by the node. If this method is called more than once, entries from the old association are deleted before entries from the new one are added.
routingTable | the Ipv4StaticRouting routing table to be associated. |
Definition at line 1925 of file olsr-routing-protocol.cc.
References AddHostNetworkAssociation(), ns3::OlsrState::GetAssociations(), ns3::Ipv4RoutingTableEntry::GetDestNetwork(), ns3::Ipv4RoutingTableEntry::GetDestNetworkMask(), ns3::Ipv4StaticRouting::GetNRoutes(), ns3::Ipv4StaticRouting::GetRoute(), m_routingTableAssociation, m_state, NS_LOG_DEBUG, NS_LOG_INFO, RemoveHostNetworkAssociation(), and UsesNonOlsrOutgoingInterface().
|
private |
Sends a TC message (if there exists any MPR selector) and reschedules the TC timer.
e | The event which has expired. |
Definition at line 2733 of file olsr-routing-protocol.cc.
References ns3::OlsrState::GetMprSelectors(), m_state, m_tcInterval, m_tcTimer, NS_LOG_DEBUG, ns3::Timer::Schedule(), and SendTc().
Referenced by DoStart(), and SetIpv4().
|
private |
Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
The task of actually removing the tuple is left to the OLSR agent.
e | The event which has expired. |
Definition at line 2910 of file olsr-routing-protocol.cc.
References DELAY, ns3::olsr::TopologyTuple::destAddr, ns3::olsr::TopologyTuple::expirationTime, ns3::OlsrState::FindTopologyTuple(), ns3::olsr::TopologyTuple::lastAddr, m_events, m_state, ns3::Simulator::Now(), RemoveTopologyTuple(), ns3::Simulator::Schedule(), and ns3::EventGarbageCollector::Track().
Referenced by ProcessTc().
|
private |
Tests whether or not the specified route uses a non-OLSR outgoing interface. Returns true if the outgoing interface of the specified route is a non-OLSR interface. Returns false otherwise.
Definition at line 1975 of file olsr-routing-protocol.cc.
References ns3::Ipv4RoutingTableEntry::GetInterface(), and m_interfaceExclusions.
Referenced by SetRoutingTableAssociation().
|
friend |
Definition at line 81 of file olsr-routing-protocol.h.
|
private |
Advertised Neighbor Set sequence number.
Definition at line 149 of file olsr-routing-protocol.h.
Referenced by IncrementAnsn(), SendTc(), and SetIpv4().
|
private |
Definition at line 142 of file olsr-routing-protocol.h.
Referenced by AssociationTupleTimerExpire(), DupTupleTimerExpire(), IfaceAssocTupleTimerExpire(), LinkSensing(), LinkTupleTimerExpire(), MprSelTupleTimerExpire(), Nb2hopTupleTimerExpire(), PopulateMprSelectorSet(), PopulateTwoHopNeighborSet(), ProcessTc(), and TopologyTupleTimerExpire().
|
private |
HELLO messages' emission interval.
Definition at line 152 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), HelloTimerExpire(), and SendHello().
|
private |
Definition at line 219 of file olsr-routing-protocol.h.
Referenced by HelloTimerExpire(), and SetIpv4().
|
private |
HNA messages' emission interval.
Definition at line 158 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), and HnaTimerExpire().
|
private |
Definition at line 140 of file olsr-routing-protocol.h.
Referenced by DoDispose(), PrintRoutingTable(), RouteInput(), RouteOutput(), RoutingProtocol(), RoutingTableComputation(), and SetIpv4().
|
private |
Definition at line 228 of file olsr-routing-protocol.h.
Referenced by HnaTimerExpire(), and SetIpv4().
|
private |
Definition at line 117 of file olsr-routing-protocol.h.
Referenced by DoStart(), GetInterfaceExclusions(), SendMid(), SetInterfaceExclusions(), and UsesNonOlsrOutgoingInterface().
Definition at line 165 of file olsr-routing-protocol.h.
Referenced by AddEntry(), DoDispose(), DoStart(), PrintRoutingTable(), RouteInput(), RouteOutput(), SendMid(), SetIpv4(), and SetMainInterface().
|
private |
Definition at line 232 of file olsr-routing-protocol.h.
Referenced by LinkTupleTimerExpire(), and SetIpv4().
|
private |
Definition at line 301 of file olsr-routing-protocol.h.
Referenced by AddEntry(), DoStart(), Dump(), ForwardDefault(), LinkSensing(), LinkTupleUpdated(), MprComputation(), NeighborLoss(), PopulateMprSelectorSet(), PopulateTwoHopNeighborSet(), ProcessHello(), ProcessMid(), ProcessTc(), RecvOlsr(), RemoveLinkTuple(), RouteInput(), RouteOutput(), RoutingTableComputation(), SendHello(), SendHna(), SendMid(), SendPacket(), SendQueuedMessages(), SendTc(), and SetMainInterface().
|
private |
Messages sequence number counter.
Definition at line 147 of file olsr-routing-protocol.h.
Referenced by GetMessageSequenceNumber(), and SetIpv4().
|
private |
MID messages' emission interval.
Definition at line 156 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), and MidTimerExpire().
|
private |
Definition at line 225 of file olsr-routing-protocol.h.
Referenced by MidTimerExpire(), and SetIpv4().
|
private |
Packets sequence number counter.
Definition at line 145 of file olsr-routing-protocol.h.
Referenced by GetPacketSequenceNumber(), and SetIpv4().
|
private |
A list of pending messages which are buffered awaiting for being sent.
Definition at line 243 of file olsr-routing-protocol.h.
Referenced by QueueMessage(), and SendQueuedMessages().
|
private |
Definition at line 244 of file olsr-routing-protocol.h.
Referenced by QueueMessage(), and SetIpv4().
|
private |
Definition at line 118 of file olsr-routing-protocol.h.
Referenced by DoDispose(), and SetRoutingTableAssociation().
|
private |
Definition at line 312 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), and RoutingTableComputation().
|
private |
Definition at line 309 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), and RecvOlsr().
|
private |
Definition at line 306 of file olsr-routing-protocol.h.
Referenced by DoDispose(), DoStart(), IsMyOwnAddress(), RecvOlsr(), and SendPacket().
|
private |
Internal state with all needed data structs.
Definition at line 163 of file olsr-routing-protocol.h.
Referenced by AddAssociationTuple(), AddDuplicateTuple(), AddHostNetworkAssociation(), AddIfaceAssocTuple(), AddMprSelectorTuple(), AddNeighborTuple(), AddTopologyTuple(), AddTwoHopNeighborTuple(), AssociationTupleTimerExpire(), Degree(), Dump(), DupTupleTimerExpire(), ForwardDefault(), GetMainAddress(), HnaTimerExpire(), IfaceAssocTupleTimerExpire(), LinkSensing(), LinkTupleTimerExpire(), LinkTupleUpdated(), MprComputation(), MprSelTupleTimerExpire(), Nb2hopTupleTimerExpire(), NeighborLoss(), PopulateMprSelectorSet(), PopulateNeighborSet(), PopulateTwoHopNeighborSet(), ProcessHello(), ProcessHna(), ProcessMid(), ProcessTc(), RecvOlsr(), RemoveAssociationTuple(), RemoveDuplicateTuple(), RemoveHostNetworkAssociation(), RemoveIfaceAssocTuple(), RemoveLinkTuple(), RemoveMprSelectorTuple(), RemoveNeighborTuple(), RemoveTopologyTuple(), RemoveTwoHopNeighborTuple(), RoutingTableComputation(), SendHello(), SendHna(), SendTc(), SetRoutingTableAssociation(), TcTimerExpire(), and TopologyTupleTimerExpire().
|
private |
Data structure for the routing table.
Definition at line 138 of file olsr-routing-protocol.h.
Referenced by AddEntry(), Clear(), Dump(), GetRoutingTableEntries(), GetSize(), Lookup(), PrintRoutingTable(), RemoveEntry(), and RouteInput().
|
private |
TC messages' emission interval.
Definition at line 154 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), and TcTimerExpire().
|
private |
Definition at line 222 of file olsr-routing-protocol.h.
Referenced by SetIpv4(), and TcTimerExpire().
|
private |
Definition at line 311 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), and SendPacket().
|
private |
Provides uniform random variables.
Definition at line 315 of file olsr-routing-protocol.h.
Referenced by AssignStreams(), and RoutingProtocol().
|
private |
Willingness for forwarding packets on behalf of other nodes.
Definition at line 160 of file olsr-routing-protocol.h.
Referenced by GetTypeId(), and SendHello().