23 #ifndef OLSR_AGENT_IMPL_H 
   24 #define OLSR_AGENT_IMPL_H 
   31 #include "ns3/object.h" 
   32 #include "ns3/packet.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" 
   40 #include "ns3/ipv4-routing-protocol.h" 
   41 #include "ns3/ipv4-static-routing.h" 
   66                          destAddr (), nextAddr (),
 
   67                          interface (0), distance (0) {};
 
   70 class RoutingProtocol;
 
   80   friend class ::OlsrMprTestCase;
 
  159   std::map<Ipv4Address, RoutingTableEntry> 
m_table; 
 
  189   uint32_t 
GetSize ()
 const { 
return m_table.size (); }
 
std::set< uint32_t > m_interfaceExclusions
 
An OLSR's routing table entry. 
 
uint32_t distance
Distance in hops to the destination. 
 
Simulation virtual time values and global simulation resolution. 
 
void HelloTimerExpire()
Sends a HELLO message and reschedules the HELLO timer. 
 
std::set< uint32_t > GetInterfaceExclusions() const 
 
void AddTopologyTuple(const TopologyTuple &tuple)
Adds a topology tuple to the Topology Set. 
 
Smart pointer class similar to boost::intrusive_ptr. 
 
void DoDispose()
Destructor implementation. 
 
SocketErrno
Enumeration of the possible errors returned by a socket. 
 
void IfaceAssocTupleTimerExpire(Ipv4Address ifaceAddr)
Removes tuple_ if expired. 
 
void RemoveMprSelectorTuple(const MprSelectorTuple &tuple)
Removes an MPR selector tuple from the MPR Selector Set. 
 
uint16_t GetPacketSequenceNumber()
Increments packet sequence number and returns the new value. 
 
Time m_midInterval
MID messages' emission interval. 
 
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 
 
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. 
 
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). 
 
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
 
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
 
void AddHostNetworkAssociation(Ipv4Address networkAddr, Ipv4Mask netmask)
Inject Association to be sent in HNA message. 
 
Ipv4Address m_mainAddress
 
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. 
 
void Nb2hopTupleTimerExpire(Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr)
Removes tuple_ if expired. 
 
void RemoveAssociationTuple(const AssociationTuple &tuple)
Removes a host network association tuple from the Association Set. 
 
void ProcessTc(const olsr::MessageHeader &msg, const Ipv4Address &senderIface)
Processes a TC message following RFC 3626 specification. 
 
void MprSelTupleTimerExpire(Ipv4Address mainAddr)
Removes 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
 
void RemoveIfaceAssocTuple(const IfaceAssocTuple &tuple)
Removes an interface association tuple from the Interface Association Set. 
 
EventGarbageCollector m_events
 
An object that tracks scheduled events and automatically cancels them when it is destroyed. 
 
virtual ~RoutingProtocol()
 
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 Association sent in HNA message. 
 
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)
 
OLSR routing protocol for IPv4. 
 
void ProcessHello(const olsr::MessageHeader &msg, const Ipv4Address &receiverIface, const Ipv4Address &senderIface)
Processes a HELLO message following RFC 3626 specification. 
 
void AddAssociationTuple(const AssociationTuple &tuple)
Adds a host network association tuple to the Association Set. 
 
Ptr< Ipv4StaticRouting > m_hnaRoutingTable
 
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) 
 
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' emission interval. 
 
void SetRoutingTableAssociation(Ptr< Ipv4StaticRouting > routingTable)
Inject Associations from an Ipv4StaticRouting instance. 
 
std::map< Ptr< Socket >, Ipv4InterfaceAddress > m_socketAddresses
 
void TopologyTupleTimerExpire(Ipv4Address destAddr, Ipv4Address lastAddr)
Removes tuple_ if expired. 
 
Time m_tcInterval
TC messages' emission interval. 
 
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. 
 
virtual void PrintRoutingTable(Ptr< OutputStreamWrapper > stream) const 
Print the Routing Table entries. 
 
void NeighborLoss(const LinkTuple &tuple)
Performs all actions needed when a neighbor loss occurs. 
 
void RemoveTopologyTuple(const TopologyTuple &tuple)
Removes a topology tuple from 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)
 
static TypeId GetTypeId(void)
 
This class encapsulates all data structures needed for maintaining internal state of an OLSR node...
 
void MidTimerExpire()
Sends a MID message (if the node has more than one interface) and resets the MID timer. 
 
Ptr< Ipv4StaticRouting > m_routingTableAssociation
 
Ptr< const Ipv4StaticRouting > GetRoutingTableAssociation() const 
Returns the internal HNA table. 
 
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. 
 
bool Lookup(const Ipv4Address &dest, RoutingTableEntry &outEntry) const 
Looks up an entry for the specified destination address. 
 
std::vector< MessageHeader > MessageList
 
virtual void NotifyInterfaceDown(uint32_t interface)
 
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...
 
Ipv4Address GetMainAddress(Ipv4Address iface_addr) const 
Gets the main address associated with a given interface address. 
 
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'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. 
 
void(* PacketTxRxTracedCallback)(const PacketHeader &header, const MessageList &messages)
TracedCallback signature for Packet transmit and receive events. 
 
bool IsMyOwnAddress(const Ipv4Address &a) const 
Check that address is one of my interfaces. 
 
a class to store IPv4 address information on an interface 
 
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
 
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)
 
void SetInterfaceExclusions(std::set< uint32_t > exceptions)
 
Time m_hnaInterval
HNA messages' emission interval. 
 
void Dump(void)
Dump the neighbor table, two-hop neighbor table, and routing table to logging output (NS_LOG_DEBUG lo...
 
virtual void DoInitialize(void)
Initialize() implementation. 
 
std::vector< RoutingTableEntry > GetRoutingTableEntries() const 
Return the list of routing table entries discovered by OLSR. 
 
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
 
a unique identifier for an interface. 
 
An Interface Association Tuple. 
 
The type "list of interface addresses". 
 
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. 
 
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 ...
 
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.