aodv_rqueue Class Reference

#include <aodv_rqueue.h>

Inheritance diagram for aodv_rqueue:

Connector NsObject TclObject Handler Collaboration diagram for aodv_rqueue:

Collaboration graph
[legend]

Detailed Description

Definition at line 50 of file aodv_rqueue.h.

Public Member Functions

 aodv_rqueue ()
int command (int argc, const char *const *argv)
virtual void debug (const char *fmt,...)
virtual int delay_bind_dispatch (const char *varName, const char *localName, TclObject *tracer)
virtual void delay_bind_init_all ()
Packetdeque (nsaddr_t dst)
Packetdeque (void)
virtual void drop (Packet *p)
void enque (Packet *p)
char find (nsaddr_t dst)
int isdebug () const
virtual void recv (Packet *p, const char *s)
void recv (Packet *, Handler *)
virtual void recvOnly (Packet *)
void setDropTarget (NsObject *dt)
void target (NsObject *target)
NsObjecttarget ()

Protected Member Functions

virtual void drop (Packet *p, const char *s)
void handle (Event *)
virtual void reset ()
void send (Packet *p, Handler *h)

Protected Attributes

int debug_
NsObjectdrop_
NsObjecttarget_

Private Member Functions

bool findAgedPacket (Packet *&p, Packet *&prev)
void findPacketWithDst (nsaddr_t dst, Packet *&p, Packet *&prev)
void purge (void)
Packetremove_head ()
void verifyQueue (void)

Private Attributes

Packethead_
int len_
int limit_
Packettail_
double timeout_


Constructor & Destructor Documentation

aodv_rqueue::aodv_rqueue  ) 
 

Definition at line 43 of file aodv_rqueue.cc.

References AODV_RTQ_MAX_LEN, AODV_RTQ_TIMEOUT, head_, len_, limit_, tail_, and timeout_.

00043                          {
00044   head_ = tail_ = 0;
00045   len_ = 0;
00046   limit_ = AODV_RTQ_MAX_LEN;
00047   timeout_ = AODV_RTQ_TIMEOUT;
00048 }


Member Function Documentation

int aodv_rqueue::command int  argc,
const char *const *  argv
[inline, virtual]
 

Reimplemented from Connector.

Definition at line 58 of file aodv_rqueue.h.

References Connector::command().

Referenced by AODV::command().

00059       { return Connector::command(argc, argv); }

Here is the call graph for this function:

void NsObject::debug const char *  fmt,
  ...
[virtual, inherited]
 

Definition at line 102 of file object.cc.

References NsObject::debug_.

00103 {
00104     if (!debug_)
00105         return;
00106     va_list ap;
00107     va_start(ap, fmt);
00108     vprintf(fmt, ap);
00109 }

int NsObject::delay_bind_dispatch const char *  varName,
const char *  localName,
TclObject tracer
[virtual, inherited]
 

Reimplemented in BayFullTcpAgent, Agent, MPLSAddressClassifier, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink.

Definition at line 63 of file object.cc.

References NsObject::debug_.

Referenced by MPLSAddressClassifier::delay_bind_dispatch(), and Agent::delay_bind_dispatch().

00064 {
00065     if (delay_bind_bool(varName, localName, "debug_", &debug_, tracer)) 
00066         return TCL_OK;
00067     return TclObject::delay_bind_dispatch(varName, localName, tracer);
00068 }

void NsObject::delay_bind_init_all  )  [virtual, inherited]
 

Reimplemented in BayFullTcpAgent, Agent, MPLSAddressClassifier, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink.

Definition at line 57 of file object.cc.

Referenced by MPLSAddressClassifier::delay_bind_init_all(), and Agent::delay_bind_init_all().

00058 {
00059     delay_bind_init_one("debug_");
00060 }

Packet * aodv_rqueue::deque nsaddr_t  dst  ) 
 

Definition at line 107 of file aodv_rqueue.cc.

References findPacketWithDst(), head_, len_, Packet::next_, purge(), remove_head(), tail_, and verifyQueue().

00107                                {
00108 Packet *p, *prev;
00109 
00110  /*
00111   * Purge any packets that have timed out.
00112   */
00113  purge();
00114 
00115  findPacketWithDst(dst, p, prev);
00116  assert(p == 0 || (p == head_ && prev == 0) || (prev->next_ == p));
00117 
00118  if(p == 0) return 0;
00119 
00120  if (p == head_) {
00121    p = remove_head();
00122  }
00123  else if (p == tail_) {
00124    prev->next_ = 0;
00125    tail_ = prev;
00126    len_--;
00127  }
00128  else {
00129    prev->next_ = p->next_;
00130    len_--;
00131  }
00132 
00133 #ifdef QDEBUG
00134  verifyQueue();
00135 #endif // QDEBUG
00136  return p;
00137 
00138 }

Here is the call graph for this function:

Packet * aodv_rqueue::deque void   ) 
 

Definition at line 89 of file aodv_rqueue.cc.

References purge(), remove_head(), and verifyQueue().

Referenced by AODV::recvReply(), AODV::recvRequest(), AODV::rt_purge(), and AODV::sendRequest().

00089                    {
00090 Packet *p;
00091 
00092  /*
00093   * Purge any packets that have timed out.
00094   */
00095  purge();
00096 
00097  p = remove_head();
00098 #ifdef QDEBUG
00099  verifyQueue();
00100 #endif // QDEBUG
00101  return p;
00102 
00103 }

Here is the call graph for this function:

void Connector::drop Packet p,
const char *  s
[protected, virtual, inherited]
 

Definition at line 114 of file connector.cc.

References Connector::drop_, Packet::free(), and NsObject::recv().

00115 {
00116     if (drop_ != 0)
00117         drop_->recv(p, s);
00118     else
00119         Packet::free(p);
00120 }

Here is the call graph for this function:

void Connector::drop Packet p  )  [virtual, inherited]
 

Reimplemented in XCPQueue.

Definition at line 106 of file connector.cc.

References Connector::drop_, Packet::free(), and NsObject::recv().

Referenced by ARPTable::arpresolve(), XCPQueue::drop(), JoBS::dropFront(), Vq::dropPacketForECN(), DSRAgent::dropSendBuff(), JoBS::dropTail(), dsREDQueue::edrop(), Vq::enque(), SRR::enque(), SimpleIntServ::enque(), SFQ::enque(), rtqueue::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), RedPDQueue::enque(), PIQueue::enque(), Marker::enque(), GK::enque(), dsREDQueue::enque(), DRR::enque(), DropTail::enque(), Demarker::enque(), enque(), toraAgent::forward(), AODV::forward(), DSDV_Agent::forwardPacket(), DSRAgent::getRouteForPacket(), HDLC::goBackNMode(), Snoop::handle(), DSRAgent::handleFlowForwarding(), DSRAgent::handleForwarding(), HDLC::handleRR(), DSDV_Agent::lost_link(), TCPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), rtqueue::purge(), SessionTTLChecker::recv(), TTLChecker::recv(), FullTcpAgent::recv(), BayFullTcpAgent::recv(), SatLL::recv(), LL::recv(), GAFPartner::recv(), Filter::recv(), DynamicLink::recv(), AODV::recvError(), PriQueue::recvHighPriority(), HDLC::recvIncoming(), toraAgent::reset(), HDLC::reset(), Queue< T >::reset(), LinkDelay::reset(), AODV::rt_ll_failed(), AODV::rt_purge(), toraAgent::rtRoutePacket(), HDLC::selectiveRepeatMode(), AODV::sendRequest(), SatLL::sendUp(), LL::sendUp(), DropTail::shrink_queue(), PriQueue::Terminate(), DSRAgent::Terminate(), CMUPriQueue::Terminate(), ARPTable::Terminate(), and DSRAgent::undeliverablePkt().

00107 {
00108     if (drop_ != 0)
00109         drop_->recv(p);
00110     else
00111         Packet::free(p);
00112 }

Here is the call graph for this function:

void aodv_rqueue::enque Packet p  ) 
 

Definition at line 51 of file aodv_rqueue.cc.

References CURRENT_TIME, Connector::drop(), DROP_RTR_QFULL, DROP_RTR_QTIMEOUT, HDR_CMN, head_, len_, limit_, Packet::next_, purge(), remove_head(), tail_, timeout_, hdr_cmn::ts_, and verifyQueue().

Referenced by AODV::local_rt_repair(), and AODV::rt_resolve().

00051                             {
00052 struct hdr_cmn *ch = HDR_CMN(p);
00053 
00054  /*
00055   * Purge any packets that have timed out.
00056   */
00057  purge();
00058  
00059  p->next_ = 0;
00060  ch->ts_ = CURRENT_TIME + timeout_;
00061 
00062  if (len_ == limit_) {
00063  Packet *p0 = remove_head();    // decrements len_
00064 
00065    assert(p0);
00066    if(HDR_CMN(p0)->ts_ > CURRENT_TIME) {
00067      drop(p0, DROP_RTR_QFULL);
00068    }
00069    else {
00070      drop(p0, DROP_RTR_QTIMEOUT);
00071    }
00072  }
00073  
00074  if(head_ == 0) {
00075    head_ = tail_ = p;
00076  }
00077  else {
00078    tail_->next_ = p;
00079    tail_ = p;
00080  }
00081  len_++;
00082 #ifdef QDEBUG
00083    verifyQueue();
00084 #endif // QDEBUG
00085 }

Here is the call graph for this function:

char aodv_rqueue::find nsaddr_t  dst  ) 
 

Definition at line 141 of file aodv_rqueue.cc.

References findPacketWithDst().

Referenced by AODV::rt_purge().

00141                               {
00142 Packet *p, *prev;  
00143     
00144  findPacketWithDst(dst, p, prev);
00145  if (0 == p)
00146    return 0;
00147  else
00148    return 1;
00149 
00150 }

Here is the call graph for this function:

bool aodv_rqueue::findAgedPacket Packet *&  p,
Packet *&  prev
[private]
 

Definition at line 220 of file aodv_rqueue.cc.

References CURRENT_TIME, HDR_CMN, head_, Packet::next_, and hdr_cmn::ts_.

Referenced by purge().

00220                                                      {
00221   
00222   p = prev = 0;
00223   for(p = head_; p; p = p->next_) {
00224     if(HDR_CMN(p)->ts_ < CURRENT_TIME) {
00225       return true;
00226     }
00227     prev = p;
00228   }
00229   return false;
00230 }

void aodv_rqueue::findPacketWithDst nsaddr_t  dst,
Packet *&  p,
Packet *&  prev
[private]
 

Definition at line 177 of file aodv_rqueue.cc.

References HDR_IP, head_, and Packet::next_.

Referenced by deque(), and find().

00177                                                                       {
00178   
00179   p = prev = 0;
00180   for(p = head_; p; p = p->next_) {
00181       //        if(HDR_IP(p)->dst() == dst) {
00182            if(HDR_IP(p)->daddr() == dst) {
00183       return;
00184     }
00185     prev = p;
00186   }
00187 }

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

Implements Handler.

Reimplemented in LinkDelay, LL, AckRecons, and Snoop.

Definition at line 91 of file object.cc.

References NsObject::recv().

00092 {
00093     recv((Packet*)e);
00094 }

Here is the call graph for this function:

int NsObject::isdebug  )  const [inline, inherited]
 

Definition at line 61 of file object.h.

References NsObject::debug_.

00061 { return debug_; }

void aodv_rqueue::purge void   )  [private]
 

Definition at line 233 of file aodv_rqueue.cc.

References findAgedPacket(), head_, len_, Packet::next_, remove_head(), tail_, and verifyQueue().

Referenced by deque(), and enque().

00233                    {
00234 Packet *p, *prev;
00235 
00236  while ( findAgedPacket(p, prev) ) {
00237     assert(p == 0 || (p == head_ && prev == 0) || (prev->next_ == p));
00238 
00239     if(p == 0) return;
00240 
00241     if (p == head_) {
00242         p = remove_head();
00243     }
00244     else if (p == tail_) {
00245         prev->next_ = 0;
00246         tail_ = prev;
00247         len_--;
00248     }
00249     else {
00250         prev->next_ = p->next_;
00251         len_--;
00252     }
00253 #ifdef QDEBUG
00254     verifyQueue();
00255 #endif // QDEBUG
00256 
00257     p = prev = 0;
00258  }
00259 
00260 }

Here is the call graph for this function:

void NsObject::recv Packet p,
const char *  s
[virtual, inherited]
 

Reimplemented in CMUTrace.

Definition at line 96 of file object.cc.

References Packet::free().

00097 {
00098     Packet::free(p);
00099 }

Here is the call graph for this function:

void aodv_rqueue::recv Packet ,
Handler
[inline, virtual]
 

Reimplemented from Connector.

Definition at line 54 of file aodv_rqueue.h.

References abort().

00054 { abort(); }

Here is the call graph for this function:

virtual void NsObject::recvOnly Packet  )  [inline, virtual, inherited]
 

Reimplemented in Agent, and Trace.

Definition at line 56 of file object.h.

Referenced by Trace::recvOnly().

00056 {};

Packet * aodv_rqueue::remove_head  )  [private]
 

Definition at line 160 of file aodv_rqueue.cc.

References head_, len_, Packet::next_, and tail_.

Referenced by deque(), enque(), and purge().

00160                          {
00161 Packet *p = head_;
00162         
00163  if(head_ == tail_) {
00164    head_ = tail_ = 0;
00165  }
00166  else {
00167    head_ = head_->next_;
00168  }
00169 
00170  if(p) len_--;
00171 
00172  return p;
00173 
00174 }

void NsObject::reset  )  [protected, virtual, inherited]
 

Reimplemented in BayFullTcpAgent, HashClassifier, IvsSource, dsREDQueue, DiffusionRate, SinkAgent, DiffusionAgent, FloodingAgent, OmniMcastAgent, LinkDelay, CBQueue, DropTail, ErrorModel, PIQueue, Queue< T >, RedPDQueue, REDQueue, REMQueue, RIOQueue, Snoop, FackTcpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, Sack1TcpAgent, TcpSink, DelAckSink, TcpAgent, VegasTcpAgent, toraAgent, Queue< T >, and XcpSink.

Definition at line 70 of file object.cc.

Referenced by NsObject::command().

00071 {
00072 }

void Connector::send Packet p,
Handler h
[inline, protected, inherited]
 

Reimplemented in Agent, and LinkDelay.

Definition at line 56 of file connector.h.

References NsObject::recv(), and Connector::target_.

Referenced by SessionTTLChecker::recv(), TTLChecker::recv(), Trace::recv(), TraceIpMac::recv(), TraceIp::recv(), SnoopQueueEDrop::recv(), SnoopQueueTagger::recv(), SnoopQueueDrop::recv(), SnoopQueueOut::recv(), SnoopQueueIn::recv(), PktCounter::recv(), NetworkInterface::recv(), MeasureMod::recv(), Filter::recv(), Connector::recv(), CMUTrace::recv(), and AddSR::recv().

00056 { target_->recv(p, h); }

Here is the call graph for this function:

void Connector::setDropTarget NsObject dt  )  [inline, inherited]
 

Definition at line 51 of file connector.h.

References Connector::drop_.

Referenced by XCPWrapQ::command().

00051 {drop_ = dt; } 

void Connector::target NsObject target  )  [inline, inherited]
 

Definition at line 49 of file connector.h.

References Connector::target(), and Connector::target_.

00049 { target_ = target; }

Here is the call graph for this function:

NsObject* Connector::target  )  [inline, inherited]
 

Definition at line 48 of file connector.h.

References Connector::target_.

Referenced by JoBS::assignRateDropsADC(), FQ::deque(), MIPMHAgent::reg(), MIPBSAgent::send_ads(), and Connector::target().

00048 { return target_; }

void aodv_rqueue::verifyQueue void   )  [private]
 

Definition at line 191 of file aodv_rqueue.cc.

References head_, and Packet::next_.

Referenced by deque(), enque(), and purge().

00191                          {
00192 Packet *p, *prev = 0;
00193 int cnt = 0;
00194 
00195  for(p = head_; p; p = p->next_) {
00196    cnt++;
00197    prev = p;
00198  }
00199  assert(cnt == len_);
00200  assert(prev == tail_);
00201 
00202 }


Field Documentation

int NsObject::debug_ [protected, inherited]
 

Reimplemented in FECModel, FloodAgent, and LandmarkAgent.

Definition at line 66 of file object.h.

Referenced by REDQueue::command(), RedPDQueue::command(), PushbackQueue::command(), NsObject::debug(), NsObject::delay_bind_dispatch(), PushbackQueue::enque(), NsObject::isdebug(), NsObject::NsObject(), TfrcAgent::recv(), PushbackQueue::reportDrop(), SctpAgent::Reset(), REDQueue::reset(), DropTail::shrink_queue(), and Delayer::try_send().

NsObject* Connector::drop_ [protected, inherited]
 

Definition at line 59 of file connector.h.

Referenced by XCPWrapQ::command(), Connector::command(), Connector::drop(), ErrorModel::recv(), and Connector::setDropTarget().

Packet* aodv_rqueue::head_ [private]
 

Definition at line 82 of file aodv_rqueue.h.

Referenced by aodv_rqueue(), deque(), enque(), findAgedPacket(), findPacketWithDst(), purge(), remove_head(), and verifyQueue().

int aodv_rqueue::len_ [private]
 

Definition at line 85 of file aodv_rqueue.h.

Referenced by aodv_rqueue(), deque(), enque(), purge(), and remove_head().

int aodv_rqueue::limit_ [private]
 

Definition at line 87 of file aodv_rqueue.h.

Referenced by aodv_rqueue(), and enque().

Packet* aodv_rqueue::tail_ [private]
 

Definition at line 83 of file aodv_rqueue.h.

Referenced by aodv_rqueue(), deque(), enque(), purge(), and remove_head().

NsObject* Connector::target_ [protected, inherited]
 

Definition at line 58 of file connector.h.

Referenced by SRAgent::command(), SA_Agent::command(), IvsReceiver::command(), MultiFieldFilter::command(), Filter::command(), Connector::command(), DiffusionAgent::DiffusionAgent(), DSRAgent::DSRAgent(), PromotionTimer::expire(), FloodingAgent::FloodingAgent(), SctpAgent::ForceSource(), toraAgent::forward(), AODV::forward(), DSDV_Agent::forwardPacket(), SensorQueryAgent::generate_query(), DSDVTriggerHandler::handle(), AckRecons::handle(), DSDV_Agent::helper_callback(), DSDV_Agent::lost_link(), OmniMcastAgent::OmniMcastAgent(), LandmarkAgent::periodic_callback(), TCPTapAgent::processpkt(), IPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), CMUPriQueue::prq_resume(), Trace::recv(), TraceIpMac::recv(), TraceIp::recv(), SRMAgent::recv(), SSMSRMAgent::recv(), SAack_Agent::recv(), Queue< T >::recv(), PingResponder::recv(), MIPEncapsulator::recv(), LmsAgent::recv(), HackLossyLink::recv(), FQ::recv(), ErrorModel::recv(), DynamicLink::recv(), DSRAgent::recv(), DelayModel::recv(), LinkDelay::recv(), CtrMcastDecap::recv(), CtrMcastEncap::recv(), CMUTrace::recv(), Trace::recvOnly(), Queue< T >::resume(), LinkDelay::send(), Connector::send(), Agent::send(), MIPBSAgent::send_ads(), SRMAgent::send_ctrl(), SSMSRMAgent::send_ctrl(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), LmsAgent::send_downstream(), LmsSender::send_lms_pkt(), LmsReceiver::send_nak(), LmsReceiver::send_refresh(), MIPMHAgent::send_sols(), LmsSender::send_spm(), LmsAgent::send_upstream(), LandmarkAgent::SendChangedTagListUpdate(), AODV::sendError(), AODV::sendHello(), UdpAgent::sendmsg(), SRMAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), MessagePassingAgent::sendmsg(), LmsSender::sendmsg(), DSDV_Agent::sendOutBCastPkt(), SA_Agent::sendpkt(), rtProtoDV::sendpkt(), RTPAgent::sendpkt(), RTCPAgent::sendpkt(), IvsSource::sendpkt(), AODV::sendReply(), AODV::sendRequest(), TPAgent::sendto(), MessagePassingAgent::sendto(), SctpAgent::SetSource(), LmsSender::solicit_naks(), Connector::target(), toraAgent::tora_output(), and Delayer::try_send().

double aodv_rqueue::timeout_ [private]
 

Definition at line 88 of file aodv_rqueue.h.

Referenced by aodv_rqueue(), and enque().


The documentation for this class was generated from the following files:
Generated on Tue Mar 6 17:03:00 2007 for ns2 Network Simulator 2.29 by  doxygen 1.4.6