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

aodv_rqueue Class Reference

#include <aodv_rqueue.h>

Inheritance diagram for aodv_rqueue:

Inheritance graph
[legend]
Collaboration diagram for aodv_rqueue:

Collaboration graph
[legend]
List of all members.

Public Member Functions

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

Protected Member Functions

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

Protected Attributes

NsObjecttarget_
NsObjectdrop_
int debug_

Private Member Functions

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

Private Attributes

Packethead_
Packettail_
int len_
int limit_
double timeout_

Constructor & Destructor Documentation

aodv_rqueue::aodv_rqueue  ) 
 

Definition at line 45 of file aodv_rqueue.cc.

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

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


Member Function Documentation

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

Reimplemented from Connector.

Definition at line 60 of file aodv_rqueue.h.

References Connector::command().

Referenced by AODV::command().

00061           { 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, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, and VegasTcpAgent.

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, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, and VegasTcpAgent.

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 109 of file aodv_rqueue.cc.

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

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

Here is the call graph for this function:

Packet * aodv_rqueue::deque void   ) 
 

Definition at line 91 of file aodv_rqueue.cc.

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

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

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

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]
 

Definition at line 106 of file connector.cc.

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

Referenced by DSRAgent::acceptRouteReply(), ARPTable::arpresolve(), 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(), LandmarkAgent::ForwardPacket(), DSDV_Agent::forwardPacket(), DSRAgent::getRouteForPacket(), Snoop::handle(), DSRAgent::handleFlowForwarding(), DSRAgent::handleForwarding(), DSDV_Agent::lost_link(), TCPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), rtqueue::purge(), imepAgent::purgeReXmitQ(), SessionTTLChecker::recv(), TTLChecker::recv(), toraAgent::recv(), FullTcpAgent::recv(), BayFullTcpAgent::recv(), TBF::recv(), SatLL::recv(), LL::recv(), GAFPartner::recv(), FloodAgent::recv(), Filter::recv(), DynamicLink::recv(), DSDV_Agent::recv(), AODV::recv(), AODV::recvError(), PriQueue::recvHighPriority(), AODV::recvReply(), toraAgent::reset(), Queue< T >::reset(), LinkDelay::reset(), AODV::rt_ll_failed(), AODV::rt_purge(), AODV::rt_resolve(), toraAgent::rtRoutePacket(), TCPTapAgent::sendpkt(), TapAgent::sendpkt(), IPTapAgent::sendpkt(), AODV::sendRequest(), SatLL::sendUp(), LL::sendUp(), 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 53 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_, and verifyQueue().

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

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

Here is the call graph for this function:

char aodv_rqueue::find nsaddr_t  dst  ) 
 

Definition at line 143 of file aodv_rqueue.cc.

References findPacketWithDst().

Referenced by AODV::rt_purge().

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

Here is the call graph for this function:

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

Definition at line 222 of file aodv_rqueue.cc.

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

Referenced by purge().

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

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

Definition at line 179 of file aodv_rqueue.cc.

References HDR_IP, head_, and Packet::next_.

Referenced by deque(), and find().

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

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 235 of file aodv_rqueue.cc.

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

Referenced by deque(), and enque().

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

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 56 of file aodv_rqueue.h.

References abort().

00056 { 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 162 of file aodv_rqueue.cc.

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

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

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

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, and Queue< T >.

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 54 of file connector.h.

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

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

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

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(), QSAgent::recv(), and MIPMHAgent::reg().

00048 { return target_; }

void aodv_rqueue::verifyQueue void   )  [private]
 

Definition at line 193 of file aodv_rqueue.cc.

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

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

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


Member Data 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(), RedPDQueue::enque(), PushbackQueue::enque(), NsObject::isdebug(), NsObject::NsObject(), TfrcAgent::recv(), PushbackQueue::reportDrop(), and REDQueue::reset().

NsObject* Connector::drop_ [protected, inherited]
 

Definition at line 57 of file connector.h.

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

Packet* aodv_rqueue::head_ [private]
 

Definition at line 84 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 87 of file aodv_rqueue.h.

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

int aodv_rqueue::limit_ [private]
 

Definition at line 89 of file aodv_rqueue.h.

Referenced by aodv_rqueue(), and enque().

Packet* aodv_rqueue::tail_ [private]
 

Definition at line 85 of file aodv_rqueue.h.

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

NsObject* Connector::target_ [protected, inherited]
 

Definition at line 56 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(), toraAgent::forward(), AODV::forward(), LandmarkAgent::ForwardPacket(), DSDV_Agent::forwardPacket(), SensorQueryAgent::generate_query(), DSDVTriggerHandler::handle(), AckRecons::handle(), DSRAgent::handlePacketReceipt(), DSDV_Agent::helper_callback(), AODV::initialized(), DSDV_Agent::lost_link(), OmniMcastAgent::OmniMcastAgent(), LandmarkAgent::periodic_callback(), LandmarkAgent::ProcessHierUpdate(), TCPTapAgent::processpkt(), IPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), CMUPriQueue::prq_resume(), DequeTrace::recv(), Trace::recv(), TraceIpMac::recv(), TraceIp::recv(), TBF::recv(), SRMAgent::recv(), SSMSRMAgent::recv(), SatDequeTrace::recv(), SAack_Agent::recv(), Queue< T >::recv(), PingResponder::recv(), MIPEncapsulator::recv(), LmsAgent::recv(), HackLossyLink::recv(), GAFPartner::recv(), FQ::recv(), FloodAgent::recv(), ErrorModel::recv(), DynamicLink::recv(), DumbAgent::recv(), DSRAgent::recv(), DelayModel::recv(), LinkDelay::recv(), CtrMcastDecap::recv(), CtrMcastEncap::recv(), CMUTrace::recv(), PriQueue::recvHighPriority(), Trace::recvOnly(), TapAgent::recvpkt(), Queue< T >::resume(), LinkDelay::send(), Connector::send(), Agent::send(), MIPBSAgent::send_ads(), SRMAgent::send_ctrl(), SSMSRMAgent::send_ctrl(), MFTPSndAgent::send_data(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), LmsAgent::send_downstream(), SSMSRMAgent::send_glb_sess(), LmsSender::send_lms_pkt(), SSMSRMAgent::send_loc_sess(), MFTPRcvAgent::send_nak(), LmsReceiver::send_nak(), LmsReceiver::send_refresh(), SSMSRMAgent::send_rep_sess(), SRMAgent::send_sess(), MIPMHAgent::send_sols(), LmsSender::send_spm(), MFTPSndAgent::send_status_request(), LmsAgent::send_upstream(), LandmarkAgent::SendChangedTagListUpdate(), AODV::sendError(), AODV::sendHello(), UdpAgent::sendmsg(), SRMAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), LmsSender::sendmsg(), DSDV_Agent::sendOutBCastPkt(), SA_Agent::sendpkt(), rtProtoDV::sendpkt(), RTPAgent::sendpkt(), RTCPAgent::sendpkt(), IvsSource::sendpkt(), AODV::sendReply(), AODV::sendRequest(), LmsSender::solicit_naks(), Connector::target(), TBF::timeout(), and toraAgent::tora_output().

double aodv_rqueue::timeout_ [private]
 

Definition at line 90 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 Apr 20 12:32:51 2004 for NS2.26SourcesOriginal by doxygen 1.3.3