Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

PushbackTimer Class Reference

#include <pushback.h>

Inheritance diagram for PushbackTimer:

Inheritance graph
[legend]
Collaboration diagram for PushbackTimer:

Collaboration graph
[legend]
List of all members.

Public Types

enum  TimerStatus { TIMER_IDLE, TIMER_PENDING, TIMER_HANDLING }

Public Member Functions

 PushbackTimer (PushbackAgent *agent)
void insert (PushbackEvent *event)
void cancelStatus (RateLimitSession *rls)
void removeEvents (RateLimitSession *rls)
int containsRefresh (int qid)
void sched (double delay)
void resched (double delay)
void cancel ()
void force_cancel ()
int status ()

Public Attributes

PushbackEventfirstEvent_

Protected Member Functions

virtual void expire (Event *e)
void schedule ()
void sanityCheck ()
virtual void handle (Event *)

Protected Attributes

PushbackAgentagent_
int status_
Event event_

Member Enumeration Documentation

enum TimerHandler::TimerStatus [inherited]
 

Enumeration values:
TIMER_IDLE 
TIMER_PENDING 
TIMER_HANDLING 

Definition at line 66 of file timer-handler.h.


Constructor & Destructor Documentation

PushbackTimer::PushbackTimer PushbackAgent agent  )  [inline]
 

Definition at line 180 of file pushback.h.

References agent, agent_, and firstEvent_.

00180 : firstEvent_(NULL) { agent_ = agent;}


Member Function Documentation

void TimerHandler::cancel  )  [inherited]
 

Definition at line 31 of file timer-handler.cc.

References TimerHandler::_cancel(), abort(), TimerHandler::status_, TimerHandler::TIMER_IDLE, and TimerHandler::TIMER_PENDING.

Referenced by BayFullTcpAgent::cancel_rtx_timeout(), cancelStatus(), SmacCsTimer::checkToCancel(), LmsReceiver::delete_nak(), QA::get_data(), SMAC::handleACK(), SMAC::handleCTS(), SMAC::handleSYNC(), LandmarkAgent::periodic_callback(), LandmarkAgent::ProcessHierUpdate(), DelAckSink::recv(), TcpAsymSink::recv(), AbsDelAckSink::recv(), MIPMHAgent::recv(), FtpClientAgent::recv(), removeEvents(), DelAckSink::reset(), FackTcpAgent::send_much(), TcpSessionAgent::set_rtx_timer(), TcpFsAgent::set_rtx_timer(), TrafficGenerator::stop(), SA_Agent::stop(), RTCPAgent::stop(), RapAgent::stop(), QA::stop(), LandmarkAgent::stop(), Estimator::stop(), NeighborCache::~NeighborCache(), PacketTypeLog::~PacketTypeLog(), QA::~QA(), and TBF::~TBF().

00032 {
00033         if (status_ != TIMER_PENDING) {
00034                 fprintf(stderr,
00035                   "Attempting to cancel timer at %p which is not scheduled\n",
00036                   this);
00037                 abort();
00038         }
00039         _cancel();
00040         status_ = TIMER_IDLE;
00041 }

Here is the call graph for this function:

void PushbackTimer::cancelStatus RateLimitSession rls  ) 
 

Definition at line 1087 of file pushback.cc.

References agent_, TimerHandler::cancel(), PushbackEvent::eventID_, firstEvent_, PushbackEvent::next_, PushbackAgent::printMsg(), PushbackAgent::prnMsg, PUSHBACK_STATUS_EVENT, PushbackEvent::rls_, and schedule().

Referenced by PushbackAgent::processPushbackStatus().

01087                                                   {
01088   
01089   if (firstEvent_==NULL) {
01090     sprintf(agent_->prnMsg, " Error timer list empty\n");
01091     agent_->printMsg(agent_->prnMsg, 0);
01092     //return; 
01093     exit(-1);
01094   }
01095   
01096   if (firstEvent_->eventID_==PUSHBACK_STATUS_EVENT && firstEvent_->rls_==rls) {
01097     cancel();
01098     PushbackEvent * event = firstEvent_;
01099     firstEvent_=firstEvent_->next_;
01100     delete(event);
01101     schedule();
01102     return;
01103   }
01104   
01105   PushbackEvent * previous = firstEvent_;
01106   PushbackEvent * current = firstEvent_->next_;
01107   
01108   while (current!=NULL) {
01109     if (current->eventID_ == PUSHBACK_STATUS_EVENT && current->rls_==rls) {
01110       previous->next_=current->next_;
01111       delete(current);
01112       return;
01113     } 
01114     previous=current;
01115     current=current->next_;
01116   }
01117 
01118   sprintf(agent_->prnMsg, "Error status timer not found\n");
01119   agent_->printMsg(agent_->prnMsg, 0);
01120   exit(-1);
01121 }

Here is the call graph for this function:

int PushbackTimer::containsRefresh int  qid  ) 
 

Definition at line 1124 of file pushback.cc.

References PushbackEvent::eventID_, firstEvent_, PushbackEvent::next_, PUSHBACK_REFRESH_EVENT, and PushbackEvent::qid_.

Referenced by PushbackAgent::identifyAggregate().

01124                                       {
01125   PushbackEvent * listItem = firstEvent_;
01126   while (listItem!=NULL) {
01127     if (listItem->eventID_ == PUSHBACK_REFRESH_EVENT && listItem->qid_==qid) 
01128       return 1;
01129     listItem = listItem->next_;
01130   }
01131   return 0;
01132 }

void PushbackTimer::expire Event e  )  [protected, virtual]
 

Implements TimerHandler.

Definition at line 999 of file pushback.cc.

References agent_, firstEvent_, PushbackEvent::next_, schedule(), and PushbackAgent::timeout().

00999                               {
01000  
01001   if (firstEvent_ == NULL) {
01002     printf("PushbackTimer: No event found on expiry\n");
01003     exit(-1);
01004   }
01005   
01006   PushbackEvent * event = firstEvent_;
01007   firstEvent_= firstEvent_->next_;
01008   schedule();
01009 
01010   agent_->timeout(event);
01011   delete(event);
01012 }

Here is the call graph for this function:

void TimerHandler::force_cancel  )  [inline, inherited]
 

Definition at line 60 of file timer-handler.h.

References TimerHandler::_cancel(), TimerHandler::status_, TimerHandler::TIMER_IDLE, and TimerHandler::TIMER_PENDING.

Referenced by TcpAgent::cancel_rtx_timer(), TcpSessionAgent::cancel_rtx_timer(), TcpFsAgent::cancel_rtx_timer(), AbsTcpAgent::cancel_timer(), TcpAgent::cancel_timers(), TcpSessionAgent::cancel_timers(), FullTcpAgent::cancel_timers(), TcpFsAgent::cancel_timers(), SinkAgent::command(), UnslottedAlohaMac::end_of_contention(), GAFAgent::processDiscoveryMsg(), RTPAgent::rate_change(), TfrcAgent::stop(), RTPAgent::stop(), and SinkAgent::stop().

00060                                    {    // cancel!
00061                 if (status_ == TIMER_PENDING) {
00062                         _cancel();
00063                         status_ = TIMER_IDLE;
00064                 }
00065         }

Here is the call graph for this function:

void TimerHandler::handle Event  )  [protected, virtual, inherited]
 

Implements Handler.

Reimplemented in EmpFtpTrafSession, EmpWebPage, EmpWebTrafSession, HBTimer, WebPage, and WebTrafSession.

Definition at line 69 of file timer-handler.cc.

References abort(), TimerHandler::expire(), TimerHandler::status_, TimerHandler::TIMER_HANDLING, TimerHandler::TIMER_IDLE, and TimerHandler::TIMER_PENDING.

Referenced by WebTrafSession::handle(), WebPage::handle(), HBTimer::handle(), EmpWebTrafSession::handle(), EmpWebPage::handle(), and EmpFtpTrafSession::handle().

00070 {
00071         if (status_ != TIMER_PENDING)   // sanity check
00072                 abort();
00073         status_ = TIMER_HANDLING;
00074         expire(e);
00075         // if it wasn't rescheduled, it's done
00076         if (status_ == TIMER_HANDLING)
00077                 status_ = TIMER_IDLE;
00078 }

Here is the call graph for this function:

void PushbackTimer::insert PushbackEvent event  ) 
 

Definition at line 1016 of file pushback.cc.

References agent_, firstEvent_, PushbackEvent::next_, PushbackAgent::printMsg(), PushbackAgent::prnMsg, sanityCheck(), schedule(), PushbackEvent::setSucc(), PushbackEvent::time_, and PushbackEvent::type().

Referenced by PushbackAgent::identifyAggregate(), PushbackAgent::initialUpdate(), PushbackAgent::processPushbackRefresh(), PushbackAgent::processPushbackRequest(), PushbackAgent::pushbackCheck(), and PushbackAgent::pushbackRefresh().

01016                                            {
01017 
01018   sprintf(agent_->prnMsg,"%s timer set\n", PushbackEvent::type(event));
01019   agent_->printMsg(agent_->prnMsg,4);
01020   if (firstEvent_ == NULL) {
01021     firstEvent_ = event;
01022     schedule();
01023     return;
01024   }
01025 
01026   if (event->time_ < firstEvent_->time_) {
01027     event->setSucc(firstEvent_);
01028     firstEvent_=event;
01029     schedule();
01030     return;
01031   }
01032 
01033   PushbackEvent * listItem = firstEvent_;
01034   while (listItem->next_!=NULL && listItem->next_->time_ <= event->time_) {
01035     listItem = listItem->next_;
01036   }
01037   
01038   event->setSucc(listItem->next_);
01039   listItem->setSucc(event);
01040  
01041   //comment the sanity check out later
01042   sanityCheck();
01043   
01044   return;
01045 }

Here is the call graph for this function:

void PushbackTimer::removeEvents RateLimitSession rls  ) 
 

Definition at line 1048 of file pushback.cc.

References TimerHandler::cancel(), firstEvent_, PushbackEvent::next_, PushbackEvent::rls_, and schedule().

Referenced by PushbackAgent::pushbackCancel().

01048                                                   {
01049   if (firstEvent_==NULL) return;
01050   while (firstEvent_!= NULL && firstEvent_->rls_==rls) {
01051     cancel();
01052     PushbackEvent * event = firstEvent_;
01053     firstEvent_=firstEvent_->next_;
01054     delete(event);
01055     schedule();
01056   }
01057   if (firstEvent_==NULL) return;
01058 
01059   PushbackEvent * previous = firstEvent_;
01060   PushbackEvent * current = firstEvent_->next_;
01061   while (current!=NULL) {
01062     if (current->rls_==rls) {
01063       previous->next_=current->next_;
01064       delete(current);
01065       current = previous->next_;
01066       continue;
01067     }
01068     previous=current;
01069     current=current->next_;
01070   }
01071 
01072 }

Here is the call graph for this function:

void TimerHandler::resched double  delay  )  [inherited]
 

Definition at line 60 of file timer-handler.cc.

References TimerHandler::_cancel(), TimerHandler::_sched(), TimerHandler::status_, and TimerHandler::TIMER_PENDING.

Referenced by UnslottedAlohaMac::backoff(), SinkAgent::bcast_interest(), PIQueue::calculate_p(), SMAC::collision(), MIPMHAgent::command(), MIPBSAgent::command(), GAFAgent::command(), SinkAgent::command(), LmsReceiver::create_nak(), GAFAgent::duty_timeout(), PacketTypeLog::expire(), QSTimer::expire(), OmniMcastSendBufTimer::expire(), OmniMcastArpBufferTimer::expire(), QATimer::expire(), PromotionTimer::expire(), SendBufferTimer::expire(), SendBufTimer::expire(), ArpBufferTimer::expire(), EnergyTimer::expire(), DiffusionRate::GradientTimeOut(), SatLinkHandoffMgr::handoff(), TermLinkHandoffMgr::handoff(), RapAgent::IpgTimeout(), RapAgent::LossHandler(), DiffusionRate::NegReinfTimeOut(), TfrcAgent::nextpkt(), TfrcSinkAgent::nextpkt(), RBPRenoTcpAgent::paced_send_one(), RBPVegasTcpAgent::paced_send_one(), QSNewRenoTcpAgent::paced_send_one(), PacketTypeLog::PacketTypeLog(), LandmarkAgent::periodic_callback(), LandmarkAgent::ProcessHierUpdate(), LogWebTrafPool::processLog(), PushbackQueue::PushbackQueue(), QSAgent::QSAgent(), RTPAgent::rate_change(), TfrcAgent::recv(), DelAckSink::recv(), FullTcpAgent::recv(), BayFullTcpAgent::recv(), TcpAsymSink::recv(), AbsDelAckSink::recv(), TBF::recv(), SMAC::recv(), SA_Agent::recv(), FtpClientAgent::recv(), TfrcAgent::reduce_rate_on_no_feedback(), MIPMHAgent::reg(), SinkAgent::report(), LivenessTimer::resched(), HBTimer::resched(), RapAgent::RttTimeout(), SmacCounterTimer::sched(), schedule(), WebServer::schedule_next_job(), GAFAgent::schedule_wakeup(), TcpFsAgent::send_helper(), TcpAsymAgent::send_helper(), TcpAgent::send_much(), TcpSessionAgent::send_much(), Sack1TcpAgent::send_much(), SackRHTcpAgent::send_much(), IntTcpAgent::send_much(), FullTcpAgent::send_much(), BayFullTcpAgent::send_much(), FackTcpAgent::send_much(), UnslottedAlohaMac::sendDown(), UnslottedAlohaMac::sendUp(), TcpAgent::set_rtx_timer(), TcpSessionAgent::set_rtx_timer(), TcpFsAgent::set_rtx_timer(), AbsTcpAgent::set_timer(), REMQueue::set_update_timer(), TrafficGenerator::start(), TfrcAgent::start(), RTPAgent::start(), RTCPAgent::start(), FtpClientAgent::start(), Estimator::start(), SinkAgent::start(), DiffusionRate::Start(), DiffusionProb::Start(), TrafficGenerator::timeout(), TrafficTrace::timeout(), TelnetApp::timeout(), FullTcpAgent::timeout(), BayFullTcpAgent::timeout(), TBF::timeout(), SA_Agent::timeout(), RTPAgent::timeout(), RTCPAgent::timeout(), PushbackQueue::timeout(), MIPMHAgent::timeout(), MIPBSAgent::timeout(), LmsReceiver::timeout(), GAFAgent::timeout(), EXPOO_Traffic::timeout(), Estimator::timeout(), SinkAgent::timeout(), CBR_PP_Traffic::timeout(), WirelessPhy::UpdateIdleEnergy(), SMAC::updateNav(), SMAC::updateNeighNav(), and WirelessPhy::WirelessPhy().

00061 {
00062         if (status_ == TIMER_PENDING)
00063                 _cancel();
00064         _sched(delay);
00065         status_ = TIMER_PENDING;
00066 }

Here is the call graph for this function:

void PushbackTimer::sanityCheck  )  [protected]
 

Definition at line 1135 of file pushback.cc.

References agent_, firstEvent_, PushbackEvent::next_, PushbackAgent::printMsg(), PushbackAgent::prnMsg, and PushbackEvent::time_.

Referenced by insert().

01135                            {
01136 
01137   if (firstEvent_==NULL || firstEvent_->next_ == NULL) return;
01138   
01139   PushbackEvent * listItem = firstEvent_;
01140   while (listItem->next_!=NULL) {
01141     if (listItem->time_ > listItem->next_->time_) {
01142       sprintf(agent_->prnMsg, "Sanity Check Failed\n");
01143       agent_->printMsg(agent_->prnMsg, 0);
01144       exit(-1);
01145     }
01146     listItem = listItem->next_;
01147   }
01148 
01149 }

Here is the call graph for this function:

void TimerHandler::sched double  delay  )  [inherited]
 

Reimplemented in SmacRecvTimer, SmacNeighNavTimer, and SmacCounterTimer.

Definition at line 49 of file timer-handler.cc.

References TimerHandler::_sched(), abort(), TimerHandler::status_, TimerHandler::TIMER_IDLE, and TimerHandler::TIMER_PENDING.

Referenced by SMAC::checkToSend(), WebTrafPool::command(), EmpWebTrafPool::command(), EmpFtpTrafPool::command(), DSRAgent::command(), EmpWebPage::doneObject(), WebTrafSession::donePage(), EmpWebTrafSession::donePage(), QA::get_data(), WebTrafSession::handle(), WebPage::handle(), EmpWebTrafSession::handle(), EmpWebPage::handle(), EmpFtpTrafSession::handle(), SMAC::handleCounterTimer(), LandmarkAgent::ProcessHierUpdate(), SmacCounterTimer::sched(), SmacNeighNavTimer::sched(), SmacRecvTimer::sched(), LivenessTimer::sched(), PushTimer::sched(), HBTimer::sched(), SMAC::sentDATA(), SMAC::sentRTS(), SMAC::SMAC(), TelnetApp::start(), OmniMcastAgent::Start(), DiffusionAgent::Start(), LandmarkAgent::startUp(), and SMAC::transmit().

00050 {
00051         if (status_ != TIMER_IDLE) {
00052                 fprintf(stderr,"Couldn't schedule timer");
00053                 abort();
00054         }
00055         _sched(delay);
00056         status_ = TIMER_PENDING;
00057 }

Here is the call graph for this function:

void PushbackTimer::schedule  )  [protected]
 

Definition at line 1075 of file pushback.cc.

References agent_, Scheduler::clock(), firstEvent_, Scheduler::instance(), PushbackAgent::printMsg(), PushbackAgent::prnMsg, TimerHandler::resched(), and PushbackEvent::time_.

Referenced by cancelStatus(), expire(), insert(), and removeEvents().

01075                         {
01076 
01077   if (firstEvent_== NULL) {
01078     sprintf(agent_->prnMsg,"Timer: Nothing to schedule\n");
01079     agent_->printMsg(agent_->prnMsg, 0);
01080     return;
01081   }
01082 
01083   resched(firstEvent_->time_ - Scheduler::instance().clock());
01084 }

Here is the call graph for this function:

int TimerHandler::status  )  [inline, inherited]
 

Definition at line 67 of file timer-handler.h.

References TimerHandler::status_.

Referenced by TcpSessionAgent::add_pkts(), BayFullTcpAgent::cancel_rtx_timeout(), HttpMInvalCache::command(), FullTcpAgent::foutput(), QA::get_data(), TcpAgent::output(), VegasTcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), BayFullTcpAgent::output(), DelAckSink::recv(), FullTcpAgent::recv(), BayFullTcpAgent::recv(), TcpAsymSink::recv(), AbsDelAckSink::recv(), MIPMHAgent::recv(), DelAckSink::reset(), TcpAgent::send_much(), TcpSessionAgent::send_much(), Sack1TcpAgent::send_much(), SackRHTcpAgent::send_much(), IntTcpAgent::send_much(), FullTcpAgent::send_much(), BayFullTcpAgent::send_much(), FackTcpAgent::send_much(), TcpSessionAgent::set_rtx_timer(), TcpFsAgent::set_rtx_timer(), RapAgent::stop(), QA::stop(), and QA::~QA().

00067 { return status_; };


Member Data Documentation

PushbackAgent* PushbackTimer::agent_ [protected]
 

Definition at line 187 of file pushback.h.

Referenced by cancelStatus(), expire(), insert(), PushbackTimer(), sanityCheck(), and schedule().

Event TimerHandler::event_ [protected, inherited]
 

Definition at line 75 of file timer-handler.h.

Referenced by TimerHandler::_cancel(), TimerHandler::_sched(), WebPage::start(), and EmpWebPage::start().

PushbackEvent* PushbackTimer::firstEvent_
 

Definition at line 178 of file pushback.h.

Referenced by cancelStatus(), containsRefresh(), expire(), insert(), PushbackTimer(), removeEvents(), sanityCheck(), and schedule().

int TimerHandler::status_ [protected, inherited]
 

Definition at line 74 of file timer-handler.h.

Referenced by SmacTimer::busy(), TimerHandler::cancel(), SmacCsTimer::checkToCancel(), TimerHandler::force_cancel(), TimerHandler::handle(), TimerHandler::resched(), TimerHandler::sched(), SmacCounterTimer::sched(), WebPage::start(), EmpWebPage::start(), TimerHandler::status(), TimerHandler::TimerHandler(), EmpFtpTrafSession::~EmpFtpTrafSession(), EmpWebTrafSession::~EmpWebTrafSession(), and WebTrafSession::~WebTrafSession().


The documentation for this class was generated from the following files:
Generated on Tue Apr 20 13:09:46 2004 for NS2.26SourcesOriginal by doxygen 1.3.3