A Discrete-Event Network Simulator
API
olsr-routing-protocol.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2004 Francisco J. Ros
4  * Copyright (c) 2007 INESC Porto
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Authors: Francisco J. Ros <fjrm@dif.um.es>
20  * Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
21  */
22 
23 #ifndef OLSR_AGENT_IMPL_H
24 #define OLSR_AGENT_IMPL_H
25 
26 #include "olsr-header.h"
27 #include "ns3/test.h"
28 #include "olsr-state.h"
29 #include "olsr-repositories.h"
30 
31 #include "ns3/object.h"
32 #include "ns3/packet.h"
33 #include "ns3/node.h"
34 #include "ns3/socket.h"
35 #include "ns3/event-garbage-collector.h"
36 #include "ns3/random-variable-stream.h"
37 #include "ns3/timer.h"
38 #include "ns3/traced-callback.h"
39 #include "ns3/ipv4.h"
40 #include "ns3/ipv4-routing-protocol.h"
41 #include "ns3/ipv4-static-routing.h"
42 
43 #include <vector>
44 #include <map>
45 
47 class OlsrMprTestCase;
48 
49 namespace ns3 {
50 namespace olsr {
51 
56 
60 {
63  uint32_t interface;
64  uint32_t distance;
65 
66  RoutingTableEntry () : // default values
67  destAddr (), nextAddr (),
68  interface (0), distance (0)
69  {
70  }
71 };
72 
73 class RoutingProtocol;
74 
81 {
82 public:
86  friend class ::OlsrMprTestCase;
87 
92  static TypeId GetTypeId (void);
93 
94  RoutingProtocol ();
95  virtual ~RoutingProtocol ();
96 
102  void SetMainInterface (uint32_t interface);
103 
109  void Dump (void);
110 
115  std::vector<RoutingTableEntry> GetRoutingTableEntries () const;
116 
125  int64_t AssignStreams (int64_t stream);
126 
133  typedef void (* PacketTxRxTracedCallback)(const PacketHeader & header, const MessageList & messages);
134 
140  typedef void (* TableChangeTracedCallback) (uint32_t size);
141 
142 private:
143  std::set<uint32_t> m_interfaceExclusions;
145 
146 public:
151  std::set<uint32_t> GetInterfaceExclusions () const
152  {
153  return m_interfaceExclusions;
154  }
155 
160  void SetInterfaceExclusions (std::set<uint32_t> exceptions);
161 
170  void AddHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask);
171 
180  void RemoveHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask);
181 
193 
199 
200 protected:
201  virtual void DoInitialize (void);
202 private:
203  std::map<Ipv4Address, RoutingTableEntry> m_table;
204 
206 
208 
211  uint16_t m_ansn;
212 
217  uint8_t m_willingness;
218 
221 
225  void Clear ();
226 
231  uint32_t GetSize () const
232  {
233  return m_table.size ();
234  }
235 
240  void RemoveEntry (const Ipv4Address &dest);
251  void AddEntry (const Ipv4Address &dest,
252  const Ipv4Address &next,
253  uint32_t interface,
254  uint32_t distance);
265  void AddEntry (const Ipv4Address &dest,
266  const Ipv4Address &next,
267  const Ipv4Address &interfaceAddress,
268  uint32_t distance);
269 
276  bool Lookup (const Ipv4Address &dest,
277  RoutingTableEntry &outEntry) const;
278 
297  bool FindSendEntry (const RoutingTableEntry &entry,
298  RoutingTableEntry &outEntry) const;
299 
300  // From Ipv4RoutingProtocol
302  const Ipv4Header &header,
303  Ptr<NetDevice> oif,
304  Socket::SocketErrno &sockerr);
305  virtual bool RouteInput (Ptr<const Packet> p,
306  const Ipv4Header &header,
311  ErrorCallback ecb);
312  virtual void NotifyInterfaceUp (uint32_t interface);
313  virtual void NotifyInterfaceDown (uint32_t interface);
314  virtual void NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address);
315  virtual void NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address);
316  virtual void SetIpv4 (Ptr<Ipv4> ipv4);
317  virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream, Time::Unit unit = Time::S) const;
318 
319  void DoDispose ();
320 
326  void SendPacket (Ptr<Packet> packet, const MessageList &containedMessages);
327 
332  inline uint16_t GetPacketSequenceNumber ();
333 
338  inline uint16_t GetMessageSequenceNumber ();
339 
344  void RecvOlsr (Ptr<Socket> socket);
345 
349  void MprComputation ();
350 
354  void RoutingTableComputation ();
355 
361  Ipv4Address GetMainAddress (Ipv4Address iface_addr) const;
362 
369 
370  // Timer handlers
372 
375  void HelloTimerExpire ();
376 
378 
381  void TcTimerExpire ();
382 
384 
387  void MidTimerExpire ();
388 
390 
393  void HnaTimerExpire ();
394 
403  void DupTupleTimerExpire (Ipv4Address address, uint16_t sequenceNumber);
404 
406 
417  void LinkTupleTimerExpire (Ipv4Address neighborIfaceAddr);
418 
427  void Nb2hopTupleTimerExpire (Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr);
428 
436  void MprSelTupleTimerExpire (Ipv4Address mainAddr);
437 
446  void TopologyTupleTimerExpire (Ipv4Address destAddr, Ipv4Address lastAddr);
447 
453  void IfaceAssocTupleTimerExpire (Ipv4Address ifaceAddr);
454 
462  void AssociationTupleTimerExpire (Ipv4Address gatewayAddr, Ipv4Address networkAddr, Ipv4Mask netmask);
463 
467  void IncrementAnsn ();
468 
472 
483  void ForwardDefault (olsr::MessageHeader olsrMessage,
484  DuplicateTuple *duplicated,
485  const Ipv4Address &localIface,
486  const Ipv4Address &senderAddress);
487 
497  void QueueMessage (const olsr::MessageHeader &message, Time delay);
498 
506  void SendQueuedMessages ();
507 
511  void SendHello ();
512 
516  void SendTc ();
517 
521  void SendMid ();
522 
526  void SendHna ();
527 
535  void NeighborLoss (const LinkTuple &tuple);
536 
542  void AddDuplicateTuple (const DuplicateTuple &tuple);
543 
549  void RemoveDuplicateTuple (const DuplicateTuple &tuple);
550 
556  void LinkTupleAdded (const LinkTuple &tuple, uint8_t willingness);
557 
563  void RemoveLinkTuple (const LinkTuple &tuple);
564 
572  void LinkTupleUpdated (const LinkTuple &tuple, uint8_t willingness);
573 
579  void AddNeighborTuple (const NeighborTuple &tuple);
580 
586  void RemoveNeighborTuple (const NeighborTuple &tuple);
587 
593  void AddTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple);
594 
601 
608  void AddMprSelectorTuple (const MprSelectorTuple &tuple);
609 
616  void RemoveMprSelectorTuple (const MprSelectorTuple &tuple);
617 
623  void AddTopologyTuple (const TopologyTuple &tuple);
624 
630  void RemoveTopologyTuple (const TopologyTuple &tuple);
631 
637  void AddIfaceAssocTuple (const IfaceAssocTuple &tuple);
638 
644  void RemoveIfaceAssocTuple (const IfaceAssocTuple &tuple);
645 
651  void AddAssociationTuple (const AssociationTuple &tuple);
652 
658  void RemoveAssociationTuple (const AssociationTuple &tuple);
659 
670  void ProcessHello (const olsr::MessageHeader &msg,
671  const Ipv4Address &receiverIface,
672  const Ipv4Address &senderIface);
673 
684  void ProcessTc (const olsr::MessageHeader &msg,
685  const Ipv4Address &senderIface);
686 
696  void ProcessMid (const olsr::MessageHeader &msg,
697  const Ipv4Address &senderIface);
698 
710  void ProcessHna (const olsr::MessageHeader &msg,
711  const Ipv4Address &senderIface);
712 
721  void LinkSensing (const olsr::MessageHeader &msg,
722  const olsr::MessageHeader::Hello &hello,
723  const Ipv4Address &receiverIface,
724  const Ipv4Address &senderIface);
725 
732  void PopulateNeighborSet (const olsr::MessageHeader &msg,
733  const olsr::MessageHeader::Hello &hello);
734 
742  const olsr::MessageHeader::Hello &hello);
743 
751  const olsr::MessageHeader::Hello &hello);
752 
753  int Degree (NeighborTuple const &tuple);
754 
760  bool IsMyOwnAddress (const Ipv4Address & a) const;
761 
763 
764  // One socket per interface, each bound to that interface's address
765  // (reason: for OLSR Link Sensing we need to know on which interface
766  // HELLO messages arrive)
767  std::map< Ptr<Socket>, Ipv4InterfaceAddress > m_sendSockets;
769 
770 
773 
776 
779 
782 
783 };
784 
785 }
786 } // namespace ns3
787 
788 #endif /* OLSR_AGENT_IMPL_H */
An MPR-Selector Tuple.
std::set< uint32_t > m_interfaceExclusions
Set of interfaces excluded by OSLR.
An OLSR&#39;s routing table entry.
uint32_t distance
Distance in hops to the destination.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
void HelloTimerExpire()
Sends a HELLO message and reschedules the HELLO timer.
void AddTopologyTuple(const TopologyTuple &tuple)
Adds a topology tuple to the Topology Set.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
void DoDispose()
Destructor implementation.
void IfaceAssocTupleTimerExpire(Ipv4Address ifaceAddr)
Removes interface association tuple_ if expired.
void RemoveMprSelectorTuple(const MprSelectorTuple &tuple)
Removes an MPR selector tuple from the MPR Selector Set.
Timer m_helloTimer
Timer for the HELLO message.
uint16_t GetPacketSequenceNumber()
Increments packet sequence number and returns the new value.
Time m_midInterval
MID messages&#39; emission interval.
A simple Timer class.
Definition: timer.h:73
This header can store HELP, TC, MID and HNA messages.
Definition: olsr-header.h:157
void Clear()
Clears the routing table and frees the memory assigned to each one of its entries.
uint16_t m_messageSequenceNumber
Messages sequence number counter.
Ipv4Address destAddr
Address of the destination node.
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:258
void HnaTimerExpire()
Sends an HNA message (if the node has associated hosts/networks) and reschedules the HNA timer...
void LinkTupleUpdated(const LinkTuple &tuple, uint8_t willingness)
This function is invoked when a link tuple is updated.
Forward calls to a chain of Callback.
uint16_t m_ansn
Advertised Neighbor Set sequence number.
void AddEntry(const Ipv4Address &dest, const Ipv4Address &next, uint32_t interface, uint32_t distance)
Adds a new entry into the routing table.
bool m_linkTupleTimerFirstTime
Flag to indicate if it is the first time the LinkTupleTimer fires.
virtual void NotifyInterfaceUp(uint32_t interface)
void SendTc()
Creates a new OLSR TC message which is buffered for being sent later on.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
void(* TableChangeTracedCallback)(uint32_t size)
TracedCallback signature for routing table computation.
void DupTupleTimerExpire(Ipv4Address address, uint16_t sequenceNumber)
Removes tuple if expired.
Timer m_queuedMessagesTimer
timer for throttling outgoing messages
void AddHostNetworkAssociation(Ipv4Address networkAddr, Ipv4Mask netmask)
Injects the specified (networkAddr, netmask) tuple in the list of local HNA associations to be sent b...
Ipv4Address m_mainAddress
the node main address.
void LinkTupleTimerExpire(Ipv4Address neighborIfaceAddr)
Removes tuple_ if expired.
void SetMainInterface(uint32_t interface)
Set the OLSR main address to the first address on the indicated interface.
SocketErrno
Enumeration of the possible errors returned by a socket.
Definition: socket.h:82
uint32_t GetSize() const
Returns the routing table size.
void Nb2hopTupleTimerExpire(Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr)
Removes 2_hop neighbor tuple_ if expired.
void RemoveAssociationTuple(const AssociationTuple &tuple)
Removes a host network association tuple to the Association Set.
void ProcessTc(const olsr::MessageHeader &msg, const Ipv4Address &senderIface)
Processes a TC message following RFC 3626 specification.
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 MprSelTupleTimerExpire(Ipv4Address mainAddr)
Removes MPR selector tuple_ if expired.
Callback< void, Ptr< const Packet >, const Ipv4Header &, Socket::SocketErrno > ErrorCallback
Callback for routing errors (e.g., no route found)
std::map< Ipv4Address, RoutingTableEntry > m_table
Data structure for the routing table.
TracedCallback< const PacketHeader &, const MessageList & > m_rxPacketTrace
Rx packet trace.
void RemoveIfaceAssocTuple(const IfaceAssocTuple &tuple)
Removed an interface association tuple to the Interface Association Set.
std::vector< RoutingTableEntry > GetRoutingTableEntries() const
Get the touting table entries.
Packet header for IPv4.
Definition: ipv4-header.h:33
EventGarbageCollector m_events
Running events.
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S) const
Print the Routing Table entries.
An object that tracks scheduled events and automatically cancels them when it is destroyed.
A record of an IPv4 routing table entry for Ipv4GlobalRouting and Ipv4StaticRouting.
uint8_t m_willingness
Willingness for forwarding packets on behalf of other nodes.
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...
void RemoveHostNetworkAssociation(Ipv4Address networkAddr, Ipv4Mask netmask)
Removes the specified (networkAddr, netmask) tuple from the list of local HNA associations to be sent...
std::map< Ptr< Socket >, Ipv4InterfaceAddress > m_sendSockets
Container of sockets and the interfaces they are opened onto.
void AddIfaceAssocTuple(const IfaceAssocTuple &tuple)
Adds an interface association tuple to the Interface Association Set.
void QueueMessage(const olsr::MessageHeader &message, Time delay)
Enques an OLSR message which will be sent with a delay of (0, delay].
void SendPacket(Ptr< Packet > packet, const MessageList &containedMessages)
Send an OLSR message.
OLSR routing protocol for IPv4.
An Association Tuple.
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...
void ProcessHello(const olsr::MessageHeader &msg, const Ipv4Address &receiverIface, const Ipv4Address &senderIface)
Processes a HELLO message following RFC 3626 specification.
Unit
The unit to use to interpret a number representing time.
Definition: nstime.h:108
void AddAssociationTuple(const AssociationTuple &tuple)
Adds a host network association tuple to the Association Set.
Ptr< Ipv4StaticRouting > m_hnaRoutingTable
Routing table for HNA routes.
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)
Timer m_tcTimer
Timer for the TC message.
Ptr< Socket > m_recvSocket
Receiving socket.
void MprComputation()
Computates MPR set of a node following RFC 3626 hints.
void RemoveDuplicateTuple(const DuplicateTuple &tuple)
Removes a duplicate tuple from the Duplicate Set.
virtual void NotifyAddAddress(uint32_t interface, Ipv4InterfaceAddress address)
Time m_helloInterval
HELLO messages&#39; emission interval.
void SetRoutingTableAssociation(Ptr< Ipv4StaticRouting > routingTable)
Associates the specified Ipv4StaticRouting routing table to the OLSR routing protocol.
Ptr< const Ipv4StaticRouting > GetRoutingTableAssociation() const
Returns the internal HNA table.
void TopologyTupleTimerExpire(Ipv4Address destAddr, Ipv4Address lastAddr)
Removes topology tuple_ if expired.
Time m_tcInterval
TC messages&#39; emission interval.
std::set< uint32_t > GetInterfaceExclusions() const
Get the excluded interfaces.
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 association tuple_ if expired.
void NeighborLoss(const LinkTuple &tuple)
Performs all actions needed when a neighbor loss occurs.
void RemoveTopologyTuple(const TopologyTuple &tuple)
Removes a topology tuple to the Topology Set.
void SendMid()
Creates a new OLSR MID message which is buffered for being sent later on.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void RecvOlsr(Ptr< Socket > socket)
Receive an OLSR message.
address
Definition: first.py:37
bool IsMyOwnAddress(const Ipv4Address &a) const
Check that address is one of my interfaces.
bool Lookup(const Ipv4Address &dest, RoutingTableEntry &outEntry) const
Looks up an entry for the specified destination address.
static TypeId GetTypeId(void)
Get the type ID.
This class encapsulates all data structures needed for maintaining internal state of an OLSR node...
Definition: olsr-state.h:34
void MidTimerExpire()
Sends a MID message (if the node has more than one interface) and resets the MID timer.
Ptr< Ipv4StaticRouting > m_routingTableAssociation
Associations from an Ipv4StaticRouting instance.
void AddNeighborTuple(const NeighborTuple &tuple)
Adds a neighbor tuple to the Neighbor Set.
void SendHello()
Creates a new OLSR HELLO message which is buffered for being sent later on.
void RemoveLinkTuple(const LinkTuple &tuple)
Removes a link tuple from the Link Set.
bool UsesNonOlsrOutgoingInterface(const Ipv4RoutingTableEntry &route)
Tests whether or not the specified route uses a non-OLSR outgoing interface.
std::vector< MessageHeader > MessageList
Definition: olsr-header.h:695
Definition: olsr.py:1
virtual void NotifyInterfaceDown(uint32_t interface)
The basic layout of any packet in OLSR is as follows (omitting IP and UDP headers): ...
Definition: olsr-header.h:75
uint16_t m_packetSequenceNumber
Packets sequence number counter.
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 RoutingTableComputation()
Creates the routing table of the node following RFC 3626 hints.
void RemoveTwoHopNeighborTuple(const TwoHopNeighborTuple &tuple)
Removes a 2-hop neighbor tuple from the 2-hop Neighbor Set.
void RemoveEntry(const Ipv4Address &dest)
Deletes the entry whose destination address is given.
void ForwardDefault(olsr::MessageHeader olsrMessage, DuplicateTuple *duplicated, const Ipv4Address &localIface, const Ipv4Address &senderAddress)
OLSR&#39;s default forwarding algorithm.
Callback< void, Ptr< const Packet >, const Ipv4Header &, uint32_t > LocalDeliverCallback
Callback for packets to be locally delivered.
void ProcessHna(const olsr::MessageHeader &msg, const Ipv4Address &senderIface)
Processes a HNA message following RFC 3626 specification.
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.
int Degree(NeighborTuple const &tuple)
This auxiliary function (defined in RFC 3626) is used for calculating the MPR Set.
uint32_t interface
Interface index.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
void(* PacketTxRxTracedCallback)(const PacketHeader &header, const MessageList &messages)
TracedCallback signature for Packet transmit and receive events.
void IncrementAnsn()
Increments the ANSN counter.
Ptr< Ipv4 > m_ipv4
IPv4 object the routing is linked to.
HELLO Message Format
Definition: olsr-header.h:376
a class to store IPv4 address information on an interface
Ipv4Address GetMainAddress(Ipv4Address iface_addr) const
Gets the main address associated with a given interface address.
virtual void SetIpv4(Ptr< Ipv4 > ipv4)
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 (...
void SendQueuedMessages()
Creates as many OLSR packets as needed in order to send all buffered OLSR messages.
Ipv4Address nextAddr
Address of the next hop.
TracedCallback< const PacketHeader &, const MessageList & > m_txPacketTrace
Tx packet trace.
Timer m_midTimer
Timer for the MID message.
void SendHna()
Creates a new OLSR HNA message which is buffered for being sent later on.
Abstract base class for IPv4 routing protocols.
void LinkTupleAdded(const LinkTuple &tuple, uint8_t willingness)
Adds a link tuple.
void SetInterfaceExclusions(std::set< uint32_t > exceptions)
Set the interfaces to be excluded.
Time m_hnaInterval
HNA messages&#39; emission interval.
void Dump(void)
Dump the neighbor table, two-hop neighbor table, and routing table to logging output (NS_LOG_DEBUG lo...
Timer m_hnaTimer
Timer for the HNA message.
second
Definition: nstime.h:114
virtual void DoInitialize(void)
Initialize() implementation.
RoutingTableEntry()
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.
void RemoveNeighborTuple(const NeighborTuple &tuple)
Removes a neighbor tuple from the Neighbor Set.
uint16_t GetMessageSequenceNumber()
Increments message sequence number and returns the new value.
OlsrState m_state
Internal state with all needed data structs.
Callback< void, Ptr< Ipv4MulticastRoute >, Ptr< const Packet >, const Ipv4Header & > MulticastForwardCallback
Callback for multicast packets to be forwarded.
void AddMprSelectorTuple(const MprSelectorTuple &tuple)
Adds an MPR selector tuple to the MPR Selector Set.
TracedCallback< uint32_t > m_routingTableChanged
Routing table chanes challback.
a unique identifier for an interface.
Definition: type-id.h:58
An Interface Association Tuple.
virtual void NotifyRemoveAddress(uint32_t interface, Ipv4InterfaceAddress address)
olsr::MessageList m_queuedMessages
A list of pending messages which are buffered awaiting for being sent.
Ptr< UniformRandomVariable > m_uniformRandomVariable
Provides uniform random variables.
Callback< void, Ptr< Ipv4Route >, Ptr< const Packet >, const Ipv4Header & > UnicastForwardCallback
Callback for unicast packets to be forwarded.
Testcase for MPR computation mechanism.
void ProcessMid(const olsr::MessageHeader &msg, const Ipv4Address &senderIface)
Processes a MID message following RFC 3626 specification.