Adapt OLSR code to use SingleEvent instead of Timer, and EventCollector.

This commit is contained in:
Gustavo J. A. M. Carneiro
2007-07-27 19:21:35 +01:00
parent a7d36f9f9f
commit e85f337b2f
2 changed files with 49 additions and 40 deletions

View File

@@ -38,7 +38,8 @@
#include "ns3/packet.h"
#include "ns3/node.h"
#include "ns3/socket.h"
#include "ns3/timer.h"
#include "ns3/single-event.h"
#include "ns3/event-collector.h"
namespace ns3 { namespace olsr {
@@ -56,6 +57,7 @@ public:
virtual void SetMainInterface (uint32_t interface);
private:
EventCollector m_events;
/// Address of the routing agent.
Ipv4Address m_routingAgentAddr;
@@ -104,13 +106,13 @@ protected:
Ipv4Address GetMainAddress (Ipv4Address iface_addr);
// Timer handlers
Timer<> m_helloTimer;
SingleEvent m_helloTimer;
void HelloTimerExpire ();
Timer<> m_tcTimer;
SingleEvent m_tcTimer;
void TcTimerExpire ();
Timer<> m_midTimer;
SingleEvent m_midTimer;
void MidTimerExpire ();
void DupTupleTimerExpire (DuplicateTuple tuple);
@@ -123,7 +125,7 @@ protected:
/// A list of pending messages which are buffered awaiting for being sent.
std::vector<Packet> m_queuedMessages;
Timer<> m_queuedMessagesTimer; // timer for throttling outgoing messages
SingleEvent m_queuedMessagesTimer; // timer for throttling outgoing messages
void ForwardDefault (OlsrMessageHeader olsrMessage,
Packet messagePayload,

View File

@@ -162,11 +162,7 @@ NS_DEBUG_COMPONENT_DEFINE ("Olsr");
Olsr::Olsr (Ptr<Node> node)
:
m_useL2Notifications (false),
m_helloTimer (OLSR_HELLO_INTERVAL, MakeCallback (&Olsr::HelloTimerExpire, this)),
m_tcTimer (OLSR_TC_INTERVAL, MakeCallback (&Olsr::TcTimerExpire, this)),
m_midTimer (OLSR_MID_INTERVAL, MakeCallback (&Olsr::MidTimerExpire, this)),
m_queuedMessagesTimer (MakeCallback (&Olsr::SendQueuedMessages, this))
m_useL2Notifications (false)
{
SetInterfaceId (Olsr::iid);
@@ -239,9 +235,10 @@ void Olsr::Start ()
if (m_sendSocket->Bind (m_mainAddress, OLSR_PORT_NUMBER))
NS_ASSERT_MSG (false, "Failed to bind() OLSR send socket");
m_receiveSocket->Recv (MakeCallback (&Olsr::RecvOlsr, this));
m_helloTimer.Expire ();
m_tcTimer.Expire ();
m_midTimer.Expire ();
HelloTimerExpire ();
TcTimerExpire ();
MidTimerExpire ();
NS_DEBUG ("OLSR on node " << m_mainAddress << " started");
}
@@ -1065,10 +1062,9 @@ void
Olsr::QueueMessage (Packet message, Time delay)
{
m_queuedMessages.push_back (message);
if (not m_queuedMessagesTimer.IsRunning ())
if (not m_queuedMessagesTimer.GetEvent ().IsRunning ())
{
m_queuedMessagesTimer.SetInterval (delay);
m_queuedMessagesTimer.Schedule ();
m_queuedMessagesTimer = Simulator::Schedule (delay, &Olsr::SendQueuedMessages, this);
}
}
@@ -1395,8 +1391,9 @@ Olsr::LinkSensing (const OlsrMessageHeader &msg,
// Schedules link tuple deletion
if (created && link_tuple != NULL)
{
Simulator::Schedule (DELAY (std::min (link_tuple->time, link_tuple->symTime)),
&Olsr::LinkTupleTimerExpire, this, *link_tuple);
m_events.Track (Simulator::Schedule
(DELAY (std::min (link_tuple->time, link_tuple->symTime)),
&Olsr::LinkTupleTimerExpire, this, *link_tuple));
}
}
@@ -1470,9 +1467,10 @@ Olsr::PopulateTwoHopNeighborSet (const OlsrMessageHeader &msg,
now + msg.GetVTime ();
// Schedules nb2hop tuple
// deletion
Simulator::Schedule (DELAY (new_nb2hop_tuple.expirationTime),
&Olsr::Nb2hopTupleTimerExpire, this,
new_nb2hop_tuple);
m_events.Track (Simulator::Schedule
(DELAY (new_nb2hop_tuple.expirationTime),
&Olsr::Nb2hopTupleTimerExpire, this,
new_nb2hop_tuple));
}
else
{
@@ -1541,9 +1539,10 @@ Olsr::PopulateMprSelectorSet (const OlsrMessageHeader &msg,
AddMprSelectorTuple (mprsel_tuple);
// Schedules mpr selector tuple deletion
Simulator::Schedule (DELAY (mprsel_tuple.expirationTime),
&Olsr::MprSelTupleTimerExpire,
this, mprsel_tuple);
m_events.Track (Simulator::Schedule
(DELAY (mprsel_tuple.expirationTime),
&Olsr::MprSelTupleTimerExpire,
this, mprsel_tuple));
}
else
{
@@ -1936,7 +1935,7 @@ void
Olsr::HelloTimerExpire ()
{
SendHello ();
m_helloTimer.Schedule ();
m_helloTimer = Simulator::Schedule (m_helloInterval, &Olsr::HelloTimerExpire, this);
}
///
@@ -1948,7 +1947,7 @@ Olsr::TcTimerExpire ()
{
if (m_state.GetMprSelectors ().size () > 0)
SendTc ();
m_tcTimer.Schedule ();
m_tcTimer = Simulator::Schedule (m_tcInterval, &Olsr::TcTimerExpire, this);
}
///
@@ -1960,7 +1959,7 @@ void
Olsr::MidTimerExpire ()
{
SendMid ();
m_midTimer.Schedule ();
m_midTimer = Simulator::Schedule (m_midInterval, &Olsr::MidTimerExpire, this);
}
///
@@ -1978,7 +1977,9 @@ Olsr::DupTupleTimerExpire (DuplicateTuple tuple)
RemoveDuplicateTuple (tuple);
}
else
Simulator::Schedule (DELAY (tuple.expirationTime), &Olsr::DupTupleTimerExpire, this, tuple);
m_events.Track (Simulator::Schedule
(DELAY (tuple.expirationTime),
&Olsr::DupTupleTimerExpire, this, tuple));
}
///
@@ -2008,13 +2009,15 @@ Olsr::LinkTupleTimerExpire (LinkTuple tuple)
else
NeighborLoss (tuple);
Simulator::Schedule (DELAY(tuple.time),
&Olsr::LinkTupleTimerExpire, this, tuple);
m_events.Track (Simulator::Schedule
(DELAY(tuple.time),
&Olsr::LinkTupleTimerExpire, this, tuple));
}
else
Simulator::Schedule (DELAY (std::min (tuple.time, tuple.symTime)),
&Olsr::LinkTupleTimerExpire, this, tuple);
m_events.Track (Simulator::Schedule
(DELAY (std::min (tuple.time, tuple.symTime)),
&Olsr::LinkTupleTimerExpire, this, tuple));
}
///
@@ -2032,8 +2035,9 @@ Olsr::Nb2hopTupleTimerExpire (TwoHopNeighborTuple tuple)
RemoveTwoHopNeighborTuple (tuple);
}
else
Simulator::Schedule (DELAY (tuple.expirationTime),
&Olsr::Nb2hopTupleTimerExpire, this, tuple);
m_events.Track (Simulator::Schedule
(DELAY (tuple.expirationTime),
&Olsr::Nb2hopTupleTimerExpire, this, tuple));
}
///
@@ -2051,8 +2055,9 @@ Olsr::MprSelTupleTimerExpire (MprSelectorTuple tuple)
RemoveMprSelectorTuple (tuple);
}
else
Simulator::Schedule (DELAY (tuple.expirationTime),
&Olsr::MprSelTupleTimerExpire, this, tuple);
m_events.Track (Simulator::Schedule
(DELAY (tuple.expirationTime),
&Olsr::MprSelTupleTimerExpire, this, tuple));
}
///
@@ -2070,8 +2075,9 @@ Olsr::TopologyTupleTimerExpire (TopologyTuple tuple)
RemoveTopologyTuple (tuple);
}
else
Simulator::Schedule (DELAY (tuple.expirationTime),
&Olsr::TopologyTupleTimerExpire, this, tuple);
m_events.Track (Simulator::Schedule
(DELAY (tuple.expirationTime),
&Olsr::TopologyTupleTimerExpire, this, tuple));
}
///
@@ -2087,8 +2093,9 @@ Olsr::IfaceAssocTupleTimerExpire (IfaceAssocTuple tuple)
RemoveIfaceAssocTuple (tuple);
}
else
Simulator::Schedule (DELAY (tuple.time),
&Olsr::IfaceAssocTupleTimerExpire, this, tuple);
m_events.Track (Simulator::Schedule
(DELAY (tuple.time),
&Olsr::IfaceAssocTupleTimerExpire, this, tuple));
}