A Discrete-Event Network Simulator
API
olsr-routing-protocol.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2004 Francisco J. Ros
3  * Copyright (c) 2007 INESC Porto
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Francisco J. Ros <fjrm@dif.um.es>
19  * Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
20  */
21 
22 #ifndef OLSR_AGENT_IMPL_H
23 #define OLSR_AGENT_IMPL_H
24 
25 #include "olsr-header.h"
26 #include "olsr-repositories.h"
27 #include "olsr-state.h"
28 
29 #include "ns3/event-garbage-collector.h"
30 #include "ns3/ipv4-routing-protocol.h"
31 #include "ns3/ipv4-static-routing.h"
32 #include "ns3/ipv4.h"
33 #include "ns3/node.h"
34 #include "ns3/object.h"
35 #include "ns3/packet.h"
36 #include "ns3/random-variable-stream.h"
37 #include "ns3/socket.h"
38 #include "ns3/test.h"
39 #include "ns3/timer.h"
40 #include "ns3/traced-callback.h"
41 
42 #include <map>
43 #include <vector>
44 
46 class OlsrMprTestCase;
47 
48 namespace ns3
49 {
50 namespace olsr
51 {
52 
57 
61 {
64  uint32_t interface;
65  uint32_t distance;
66 
68  : // default values
69  destAddr(),
70  nextAddr(),
71  interface(0),
72  distance(0)
73  {
74  }
75 };
76 
77 class RoutingProtocol;
78 
85 {
86  public:
90  friend class ::OlsrMprTestCase;
91 
92  static const uint16_t OLSR_PORT_NUMBER;
93 
98  static TypeId GetTypeId();
99 
100  RoutingProtocol();
101  ~RoutingProtocol() override;
102 
108  void SetMainInterface(uint32_t interface);
109 
115  void Dump();
116 
121  std::vector<RoutingTableEntry> GetRoutingTableEntries() const;
122 
127  MprSet GetMprSet() const;
128 
133  const MprSelectorSet& GetMprSelectors() const;
134 
139  const NeighborSet& GetNeighbors() const;
140 
145  const TwoHopNeighborSet& GetTwoHopNeighbors() const;
146 
151  const TopologySet& GetTopologySet() const;
152 
157  const OlsrState& GetOlsrState() const;
158 
167  int64_t AssignStreams(int64_t stream);
168 
175  typedef void (*PacketTxRxTracedCallback)(const PacketHeader& header,
176  const MessageList& messages);
177 
183  typedef void (*TableChangeTracedCallback)(uint32_t size);
184 
185  private:
186  std::set<uint32_t> m_interfaceExclusions;
189 
190  public:
195  std::set<uint32_t> GetInterfaceExclusions() const
196  {
197  return m_interfaceExclusions;
198  }
199 
204  void SetInterfaceExclusions(std::set<uint32_t> exceptions);
205 
214  void AddHostNetworkAssociation(Ipv4Address networkAddr, Ipv4Mask netmask);
215 
224  void RemoveHostNetworkAssociation(Ipv4Address networkAddr, Ipv4Mask netmask);
225 
237 
243 
244  protected:
245  void DoInitialize() override;
246  void DoDispose() override;
247 
248  private:
249  std::map<Ipv4Address, RoutingTableEntry> m_table;
250 
252 
254 
257  uint16_t m_ansn;
258 
264 
267 
271  void Clear();
272 
277  uint32_t GetSize() const
278  {
279  return m_table.size();
280  }
281 
286  void RemoveEntry(const Ipv4Address& dest);
297  void AddEntry(const Ipv4Address& dest,
298  const Ipv4Address& next,
299  uint32_t interface,
300  uint32_t distance);
311  void AddEntry(const Ipv4Address& dest,
312  const Ipv4Address& next,
313  const Ipv4Address& interfaceAddress,
314  uint32_t distance);
315 
322  bool Lookup(const Ipv4Address& dest, RoutingTableEntry& outEntry) const;
323 
342  bool FindSendEntry(const RoutingTableEntry& entry, RoutingTableEntry& outEntry) const;
343 
344  public:
345  // From Ipv4RoutingProtocol
347  const Ipv4Header& header,
348  Ptr<NetDevice> oif,
349  Socket::SocketErrno& sockerr) override;
351  const Ipv4Header& header,
353  const UnicastForwardCallback& ucb,
354  const MulticastForwardCallback& mcb,
355  const LocalDeliverCallback& lcb,
356  const ErrorCallback& ecb) override;
357  void SetIpv4(Ptr<Ipv4> ipv4) override;
358 
360  Time::Unit unit = Time::S) const override;
361 
362  private:
363  void NotifyInterfaceUp(uint32_t interface) override;
364  void NotifyInterfaceDown(uint32_t interface) override;
365  void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address) override;
366  void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address) override;
367 
373  void SendPacket(Ptr<Packet> packet, const MessageList& containedMessages);
374 
379  inline uint16_t GetPacketSequenceNumber();
380 
385  inline uint16_t GetMessageSequenceNumber();
386 
391  void RecvOlsr(Ptr<Socket> socket);
392 
396  void MprComputation();
397 
402 
403  public:
409  Ipv4Address GetMainAddress(Ipv4Address iface_addr) const;
410 
411  private:
419 
420  // Timer handlers
425  void HelloTimerExpire();
426 
431  void TcTimerExpire();
432 
438  void MidTimerExpire();
439 
445  void HnaTimerExpire();
446 
455  void DupTupleTimerExpire(Ipv4Address address, uint16_t sequenceNumber);
456 
459 
470  void LinkTupleTimerExpire(Ipv4Address neighborIfaceAddr);
471 
481  void Nb2hopTupleTimerExpire(Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr);
482 
491  void MprSelTupleTimerExpire(Ipv4Address mainAddr);
492 
502  void TopologyTupleTimerExpire(Ipv4Address destAddr, Ipv4Address lastAddr);
503 
510  void IfaceAssocTupleTimerExpire(Ipv4Address ifaceAddr);
511 
520  void AssociationTupleTimerExpire(Ipv4Address gatewayAddr,
521  Ipv4Address networkAddr,
522  Ipv4Mask netmask);
523 
527  void IncrementAnsn();
528 
532 
544  void ForwardDefault(olsr::MessageHeader olsrMessage,
545  DuplicateTuple* duplicated,
546  const Ipv4Address& localIface,
547  const Ipv4Address& senderAddress);
548 
558  void QueueMessage(const olsr::MessageHeader& message, Time delay);
559 
567  void SendQueuedMessages();
568 
572  void SendHello();
573 
577  void SendTc();
578 
582  void SendMid();
583 
587  void SendHna();
588 
596  void NeighborLoss(const LinkTuple& tuple);
597 
603  void AddDuplicateTuple(const DuplicateTuple& tuple);
604 
610  void RemoveDuplicateTuple(const DuplicateTuple& tuple);
611 
617  void LinkTupleAdded(const LinkTuple& tuple, Willingness willingness);
618 
624  void RemoveLinkTuple(const LinkTuple& tuple);
625 
633  void LinkTupleUpdated(const LinkTuple& tuple, Willingness willingness);
634 
640  void AddNeighborTuple(const NeighborTuple& tuple);
641 
647  void RemoveNeighborTuple(const NeighborTuple& tuple);
648 
654  void AddTwoHopNeighborTuple(const TwoHopNeighborTuple& tuple);
655 
662 
669  void AddMprSelectorTuple(const MprSelectorTuple& tuple);
670 
677  void RemoveMprSelectorTuple(const MprSelectorTuple& tuple);
678 
684  void AddTopologyTuple(const TopologyTuple& tuple);
685 
691  void RemoveTopologyTuple(const TopologyTuple& tuple);
692 
698  void AddIfaceAssocTuple(const IfaceAssocTuple& tuple);
699 
705  void RemoveIfaceAssocTuple(const IfaceAssocTuple& tuple);
706 
712  void AddAssociationTuple(const AssociationTuple& tuple);
713 
719  void RemoveAssociationTuple(const AssociationTuple& tuple);
720 
731  void ProcessHello(const olsr::MessageHeader& msg,
732  const Ipv4Address& receiverIface,
733  const Ipv4Address& senderIface);
734 
745  void ProcessTc(const olsr::MessageHeader& msg, const Ipv4Address& senderIface);
746 
756  void ProcessMid(const olsr::MessageHeader& msg, const Ipv4Address& senderIface);
757 
769  void ProcessHna(const olsr::MessageHeader& msg, const Ipv4Address& senderIface);
770 
779  void LinkSensing(const olsr::MessageHeader& msg,
780  const olsr::MessageHeader::Hello& hello,
781  const Ipv4Address& receiverIface,
782  const Ipv4Address& senderIface);
783 
791  const olsr::MessageHeader::Hello& hello);
792 
800  const olsr::MessageHeader::Hello& hello);
801 
809  const olsr::MessageHeader::Hello& hello);
810 
811  int Degree(const NeighborTuple& tuple);
812 
818  bool IsMyOwnAddress(const Ipv4Address& a) const;
819 
821 
822  // One socket per interface, each bound to that interface's address
823  // (reason: for OLSR Link Sensing we need to know on which interface
824  // HELLO messages arrive)
825  std::map<Ptr<Socket>, Ipv4InterfaceAddress>
828 
831 
834 
837 
840 };
841 
842 } // namespace olsr
843 } // namespace ns3
844 
845 #endif /* OLSR_AGENT_IMPL_H */
Testcase for MPR computation mechanism.
An object that tracks scheduled events and automatically cancels them when it is destroyed.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:42
Packet header for IPv4.
Definition: ipv4-header.h:34
a class to store IPv4 address information on an interface
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:257
Abstract base class for IPv4 routing protocols.
Callback< void, Ptr< Ipv4MulticastRoute >, Ptr< const Packet >, const Ipv4Header & > MulticastForwardCallback
Callback for multicast packets to be forwarded.
Callback< void, Ptr< const Packet >, const Ipv4Header &, uint32_t > LocalDeliverCallback
Callback for packets to be locally delivered.
Callback< void, Ptr< Ipv4Route >, Ptr< const Packet >, const Ipv4Header & > UnicastForwardCallback
Callback for unicast packets to be forwarded.
Callback< void, Ptr< const Packet >, const Ipv4Header &, Socket::SocketErrno > ErrorCallback
Callback for routing errors (e.g., no route found)
A record of an IPv4 routing table entry for Ipv4GlobalRouting and Ipv4StaticRouting.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
SocketErrno
Enumeration of the possible errors returned by a socket.
Definition: socket.h:84
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
Unit
The unit to use to interpret a number representing time.
Definition: nstime.h:111
@ S
second
Definition: nstime.h:116
A simple virtual Timer class.
Definition: timer.h:74
Forward calls to a chain of Callback.
a unique identifier for an interface.
Definition: type-id.h:59
This header can store HELP, TC, MID and HNA messages.
Definition: olsr-header.h:161
This class encapsulates all data structures needed for maintaining internal state of an OLSR node.
Definition: olsr-state.h:36
The basic layout of any packet in OLSR is as follows (omitting IP and UDP headers):
Definition: olsr-header.h:79
OLSR routing protocol for IPv4.
void SendHna()
Creates a new OLSR HNA message which is buffered for being sent later on.
void RemoveHostNetworkAssociation(Ipv4Address networkAddr, Ipv4Mask netmask)
Removes the specified (networkAddr, netmask) tuple from the list of local HNA associations to be sent...
OlsrState m_state
Internal state with all needed data structs.
void AddTwoHopNeighborTuple(const TwoHopNeighborTuple &tuple)
Adds a 2-hop neighbor tuple to the 2-hop Neighbor Set.
Time m_hnaInterval
HNA messages' emission interval.
const MprSelectorSet & GetMprSelectors() const
Gets the MPR selectors.
void SendQueuedMessages()
Creates as many OLSR packets as needed in order to send all buffered OLSR messages.
uint16_t m_messageSequenceNumber
Messages sequence number counter.
const TwoHopNeighborSet & GetTwoHopNeighbors() const
Get the two hop neighbors.
olsr::MessageList m_queuedMessages
A list of pending messages which are buffered awaiting for being sent.
void RemoveLinkTuple(const LinkTuple &tuple)
Removes a link tuple from the Link Set.
void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address) override
void NotifyInterfaceUp(uint32_t interface) override
TracedCallback< uint32_t > m_routingTableChanged
Routing table changes callback.
void QueueMessage(const olsr::MessageHeader &message, Time delay)
Enqueues an OLSR message which will be sent with a delay of (0, delay].
void LinkTupleAdded(const LinkTuple &tuple, Willingness willingness)
Adds a link tuple.
void AddNeighborTuple(const NeighborTuple &tuple)
Adds a neighbor tuple to the Neighbor Set.
std::map< Ptr< Socket >, Ipv4InterfaceAddress > m_sendSockets
Container of sockets and the interfaces they are opened onto.
void LinkSensing(const olsr::MessageHeader &msg, const olsr::MessageHeader::Hello &hello, const Ipv4Address &receiverIface, const Ipv4Address &senderIface)
Updates Link Set according to a new received HELLO message (following RFC 3626 specification).
void SendPacket(Ptr< Packet > packet, const MessageList &containedMessages)
Send an OLSR message.
Timer m_tcTimer
Timer for the TC message.
void AddHostNetworkAssociation(Ipv4Address networkAddr, Ipv4Mask netmask)
Injects the specified (networkAddr, netmask) tuple in the list of local HNA associations to be sent b...
const NeighborSet & GetNeighbors() const
Get the one hop neighbors.
Ptr< Ipv4StaticRouting > m_hnaRoutingTable
Routing table for HNA routes.
void SendHello()
Creates a new OLSR HELLO message which is buffered for being sent later on.
void DoDispose() override
Destructor implementation.
bool IsMyOwnAddress(const Ipv4Address &a) const
Check that address is one of my interfaces.
bool FindSendEntry(const RoutingTableEntry &entry, RoutingTableEntry &outEntry) const
Finds the appropriate entry which must be used in order to forward a data packet to a next hop (given...
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 an input packet (to be forwarded or locally delivered)
void LinkTupleTimerExpire(Ipv4Address neighborIfaceAddr)
Removes tuple_ if expired.
void MprSelTupleTimerExpire(Ipv4Address mainAddr)
Removes MPR selector tuple_ if expired.
void RemoveTopologyTuple(const TopologyTuple &tuple)
Removes a topology tuple to the Topology Set.
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...
void AddTopologyTuple(const TopologyTuple &tuple)
Adds a topology tuple to the Topology Set.
void ProcessTc(const olsr::MessageHeader &msg, const Ipv4Address &senderIface)
Processes a TC message following RFC 3626 specification.
void SetRoutingTableAssociation(Ptr< Ipv4StaticRouting > routingTable)
Associates the specified Ipv4StaticRouting routing table to the OLSR routing protocol.
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 (...
std::set< uint32_t > GetInterfaceExclusions() const
Get the excluded interfaces.
MprSet GetMprSet() const
Gets the MPR set.
Ipv4Address m_mainAddress
the node main address.
Ptr< UniformRandomVariable > m_uniformRandomVariable
Provides uniform random variables.
void Nb2hopTupleTimerExpire(Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr)
Removes 2_hop neighbor tuple_ if expired.
void HelloTimerExpire()
Sends a HELLO message and reschedules the HELLO timer.
void AssociationTupleTimerExpire(Ipv4Address gatewayAddr, Ipv4Address networkAddr, Ipv4Mask netmask)
Removes association tuple_ if expired.
static const uint16_t OLSR_PORT_NUMBER
port number (698)
uint32_t GetSize() const
Returns the routing table size.
void SetMainInterface(uint32_t interface)
Set the OLSR main address to the first address on the indicated interface.
void RoutingTableComputation()
Creates the routing table of the node following RFC 3626 hints.
void SendMid()
Creates a new OLSR MID message which is buffered for being sent later on.
void AddEntry(const Ipv4Address &dest, const Ipv4Address &next, uint32_t interface, uint32_t distance)
Adds a new entry into the routing table.
void HnaTimerExpire()
Sends an HNA message (if the node has associated hosts/networks) and reschedules the HNA timer.
void AddIfaceAssocTuple(const IfaceAssocTuple &tuple)
Adds an interface association tuple to the Interface Association Set.
void RemoveDuplicateTuple(const DuplicateTuple &tuple)
Removes a duplicate tuple from the Duplicate Set.
const TopologySet & GetTopologySet() const
Gets the topology set.
void SendTc()
Creates a new OLSR TC message which is buffered for being sent later on.
void DupTupleTimerExpire(Ipv4Address address, uint16_t sequenceNumber)
Removes tuple if expired.
Ipv4Address GetMainAddress(Ipv4Address iface_addr) const
Gets the main address associated with a given interface address.
Timer m_midTimer
Timer for the MID message.
EventGarbageCollector m_events
Running events.
void SetIpv4(Ptr< Ipv4 > ipv4) override
bool Lookup(const Ipv4Address &dest, RoutingTableEntry &outEntry) const
Looks up an entry for the specified destination address.
void ProcessMid(const olsr::MessageHeader &msg, const Ipv4Address &senderIface)
Processes a MID message following RFC 3626 specification.
Ptr< const Ipv4StaticRouting > GetRoutingTableAssociation() const
Returns the internal HNA table.
Timer m_queuedMessagesTimer
timer for throttling outgoing messages
Willingness m_willingness
Willingness for forwarding packets on behalf of other nodes.
uint16_t m_ansn
Advertised Neighbor Set sequence number.
void RemoveIfaceAssocTuple(const IfaceAssocTuple &tuple)
Removed an interface association tuple to the Interface Association Set.
void NotifyInterfaceDown(uint32_t interface) override
void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address) override
Time m_midInterval
MID messages' emission interval.
void Clear()
Clears the routing table and frees the memory assigned to each one of its entries.
void TopologyTupleTimerExpire(Ipv4Address destAddr, Ipv4Address lastAddr)
Removes topology tuple_ if expired.
void MprComputation()
Computes MPR set of a node following RFC 3626 hints.
void ProcessHello(const olsr::MessageHeader &msg, const Ipv4Address &receiverIface, const Ipv4Address &senderIface)
Processes a HELLO message following RFC 3626 specification.
static TypeId GetTypeId()
Get the type ID.
std::map< Ipv4Address, RoutingTableEntry > m_table
Data structure for the routing table.
void RemoveEntry(const Ipv4Address &dest)
Deletes the entry whose destination address is given.
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 (foll...
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
uint16_t m_packetSequenceNumber
Packets sequence number counter.
Timer m_helloTimer
Timer for the HELLO message.
void(* PacketTxRxTracedCallback)(const PacketHeader &header, const MessageList &messages)
TracedCallback signature for Packet transmit and receive events.
void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const override
Print the Routing Table entries.
int Degree(const NeighborTuple &tuple)
This auxiliary function (defined in RFC 3626) is used for calculating the MPR Set.
void RemoveMprSelectorTuple(const MprSelectorTuple &tuple)
Removes an MPR selector tuple from the MPR Selector Set.
void ProcessHna(const olsr::MessageHeader &msg, const Ipv4Address &senderIface)
Processes a HNA message following RFC 3626 specification.
Ptr< Socket > m_recvSocket
Receiving socket.
uint16_t GetPacketSequenceNumber()
Increments packet sequence number and returns the new value.
void DoInitialize() override
Initialize() implementation.
TracedCallback< const PacketHeader &, const MessageList & > m_txPacketTrace
Tx packet trace.
void IncrementAnsn()
Increments the ANSN counter.
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.
void SetInterfaceExclusions(std::set< uint32_t > exceptions)
Set the interfaces to be excluded.
void ForwardDefault(olsr::MessageHeader olsrMessage, DuplicateTuple *duplicated, const Ipv4Address &localIface, const Ipv4Address &senderAddress)
OLSR's default forwarding algorithm.
Time m_helloInterval
HELLO messages' emission interval.
Timer m_hnaTimer
Timer for the HNA message.
std::vector< RoutingTableEntry > GetRoutingTableEntries() const
Get the routing table entries.
void LinkTupleUpdated(const LinkTuple &tuple, Willingness willingness)
This function is invoked when a link tuple is updated.
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 TcTimerExpire()
Sends a TC message (if there exists any MPR selector) and reschedules the TC timer.
TracedCallback< const PacketHeader &, const MessageList & > m_rxPacketTrace
Rx packet trace.
void Dump()
Dump the neighbor table, two-hop neighbor table, and routing table to logging output (NS_LOG_DEBUG lo...
void MidTimerExpire()
Sends a MID message (if the node has more than one interface) and resets the MID timer.
void RemoveTwoHopNeighborTuple(const TwoHopNeighborTuple &tuple)
Removes a 2-hop neighbor tuple from the 2-hop Neighbor Set.
void RemoveAssociationTuple(const AssociationTuple &tuple)
Removes a host network association tuple to the Association Set.
void(* TableChangeTracedCallback)(uint32_t size)
TracedCallback signature for routing table computation.
Time m_tcInterval
TC messages' emission interval.
bool UsesNonOlsrOutgoingInterface(const Ipv4RoutingTableEntry &route)
Tests whether or not the specified route uses a non-OLSR outgoing interface.
Ptr< Ipv4StaticRouting > m_routingTableAssociation
Associations from an Ipv4StaticRouting instance.
bool m_linkTupleTimerFirstTime
Flag to indicate if it is the first time the LinkTupleTimer fires.
const OlsrState & GetOlsrState() const
Gets the underlying OLSR state object.
uint16_t GetMessageSequenceNumber()
Increments message sequence number and returns the new value.
void RemoveNeighborTuple(const NeighborTuple &tuple)
Removes a neighbor tuple from the Neighbor Set.
void IfaceAssocTupleTimerExpire(Ipv4Address ifaceAddr)
Removes interface association tuple_ if expired.
void RecvOlsr(Ptr< Socket > socket)
Receive an OLSR message.
std::set< uint32_t > m_interfaceExclusions
Set of interfaces excluded by OSLR.
void NeighborLoss(const LinkTuple &tuple)
Performs all actions needed when a neighbor loss occurs.
Ptr< Ipv4 > m_ipv4
IPv4 object the routing is linked to.
void AddMprSelectorTuple(const MprSelectorTuple &tuple)
Adds an MPR selector tuple to the MPR Selector Set.
Willingness
Willingness for forwarding packets from other nodes.
address
Definition: first.py:47
std::vector< MprSelectorTuple > MprSelectorSet
MPR Selector Set type.
std::vector< TwoHopNeighborTuple > TwoHopNeighborSet
2-hop Neighbor Set type.
std::vector< TopologyTuple > TopologySet
Topology Set type.
std::set< Ipv4Address > MprSet
MPR Set type.
std::vector< NeighborTuple > NeighborSet
Neighbor Set type.
std::vector< MessageHeader > MessageList
Definition: olsr-header.h:703
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Definition: olsr.py:1
An Interface Association Tuple.
HELLO Message Format.
Definition: olsr-header.h:386
An MPR-Selector Tuple.
An OLSR's routing table entry.
RoutingTableEntry()
uint32_t distance
Distance in hops to the destination.
Ipv4Address nextAddr
Address of the next hop.
uint32_t interface
Interface index.
Ipv4Address destAddr
Address of the destination node.