0% found this document useful (0 votes)
88 views3 pages

Aodv.h File Sensor-Agent.h File: Timer Usage (In NS2) AODV Method: Another Method

The document provides instructions for defining and using timers in NS2 simulations. It describes how to 1) define a timer class that inherits from TimerHandler in a .h file, 2) declare the timer as a member variable in the agent class in the .h file, and 3) implement the timer's expire method in the .cc file to trigger the desired behavior when the timer expires. The timer must also be initialized when initializing the agent and can be scheduled, canceled, or triggered directly from the agent class.

Uploaded by

Avinash Avuthu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
88 views3 pages

Aodv.h File Sensor-Agent.h File: Timer Usage (In NS2) AODV Method: Another Method

The document provides instructions for defining and using timers in NS2 simulations. It describes how to 1) define a timer class that inherits from TimerHandler in a .h file, 2) declare the timer as a member variable in the agent class in the .h file, and 3) implement the timer's expire method in the .cc file to trigger the desired behavior when the timer expires. The timer must also be initialized when initializing the agent and can be scheduled, canceled, or triggered directly from the agent class.

Uploaded by

Avinash Avuthu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

research

1 of 3

http://dekst.awardspace.com/research/routing/index_tim...

Timer Usage (In NS2)


AODV method:

Another method:

1. define your timer in the .h file such as in the


aodv.h file

1. define your timer in your .h file such as in my


sensor-agent.h file

class PrintTimer : public Handler {

class WakeupTimer : public TimerHandler {

public:

public:
WakeupTimer(SensorAgent* agent) :

PrintTimer(AODV* a) : agent(a) {}
void handle(Event*);

TimerHandler() { agent_ = agent; }


void expire(Event* event);

private:
AODV *agent;

private:
SensorAgent*

Event intr;

agent_;

};

};

2. declare the timer in your routing agent in the .h

2. declare the timer in your agent as in my sensorAgent

file

in the .h file

class AODV : public Agent {

class sensorAgent : public Agent {

......

......

......

......

PrintTimer ptimer;;

WakeupTimer

.....

wakeupTimer_;

friend class PrintTimer;;

.....

....

friend class WakeupTimer;


....

};
3. In the aodv.cc file, implement your handle
function which will do what you want to do
when the timer expires
void PrintTimer::handle(Event*) {
fprintf (stderr, "This is a test for the usage of
timer.\n");
//if you want to schedule this timer periodically

};
3. In sensor-agent.cc file, implement your expire
function which will do what you want to do after the
delay
void WakeupTimer::expire(Event* event) {
// wakeup timer has expired. switch state to probing
and determine if

//#define DEFINED_DELAY 1.0 //sec

// this node needs to start working.

// Scheduler::instance().schedule(this, &intr,

agent_->switchState(SENSOR_PROBING);

Monday 22 July 2013 04:12 PM

research

2 of 3

http://dekst.awardspace.com/research/routing/index_tim...

DEFINED_DELAY);

}
4. remember to initialize it
4. remember to initialize it

sensorAgent::sensorAgent() : ..., wakeupTimer_(this),

AODV::AODV(nsaddr_t id) : ..., ptimer(this), ... {

... {

5. Then you can use it.


5. Then you can use it
For example, in
wakeupTimer_.sched(sleeping_duration);
void
wakeupTimer_.cancel();
AODV::recvReply(Packet *p) {
....
....
//when it receives a reply, schedule the print timer
for 0.5 s
//Scheduler::instance().schedule(&ptimer,
p->copy(), 0.5); //if want to process the packet
Scheduler::instance().schedule(&ptimer, new
Event(), 0.5); //nothing needs to be processed
// you can also directly call the handle function,
no delay
//ptimer.handle((Event*) 0);
// or
//Scheduler::instance().schedule(&ptimer, new
Event(), 0.0);
....
....
}
With stop, restart
in .h
class helloTimer : public Handler {
public:
helloTimer(OppFwd* a) : agent(a) { busy_ =
0; }
void handle(Event*);
void start(double time);
void stop(void);
inline int busy(void) { return busy_; }
private:
OppFwd *agent;
Event intr;
int busy_;

Monday 22 July 2013 04:12 PM

research

3 of 3

http://dekst.awardspace.com/research/routing/index_tim...

};
in .cc
void helloTimer::handle(Event*) {
busy_ = 0;
agent->sendHello();
double interval = MinHelloInterval +
((MaxHelloInterval - MinHelloInterval) *
Random::uniform());
assert(interval >= 0);
Scheduler::instance().schedule(this, &intr,
interval);
}
void helloTimer::start(double time) {
Scheduler &s = Scheduler::instance();
assert(busy_ == 0);
busy_ = 1;
s.schedule(this, &intr, time);
}
void helloTimer::stop(void) {
Scheduler &s = Scheduler::instance();
assert(busy_);
s.cancel(&intr);
busy_ = 0;
}
1. "Couldn't schedule timer", check common/timer-handler.cc
RETURN

Monday 22 July 2013 04:12 PM

You might also like