

Public Member Functions | |
| CBQueue () | |
| void | reset () |
| void | enque (Packet *) |
| void | recv (Packet *, Handler *) |
| LinkDelay * | link () const |
| CBQClass * | level (int n) const |
| Packet * | deque () |
| virtual int | command (int argc, const char *const *argv) |
| virtual void | addallot (int, double) |
| Packet * | pending_pkt () const |
| void | sched () |
| int | toplevel () |
| void | toplevel_arrival (CBQClass *, double) |
| virtual void | recv (Packet *p, const char *s) |
| virtual void | updateStats (int queuesize) |
| void | resume () |
| int | blocked () const |
| void | unblock () |
| void | block () |
| int | limit () |
| int | length () |
| int | byteLength () |
| virtual double | utilization (void) |
| virtual void | destroy () |
| void | enqueue (QueueElem< T > *e) |
| QueueElem< T > * | dequeue () |
| void | detach (QueueElem< T > *e) |
| QueueElem< T > * | getHead () |
| int | is_empty () const |
| int | size () const |
| NsObject * | target () |
| virtual void | drop (Packet *p) |
| 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 Types | |
| enum | eligible_type_ { NONE, FORMAL, ANCESTORS, TOPLEVEL } |
Protected Member Functions | |
| int | algorithm (const char *) |
| virtual int | insert_class (CBQClass *) |
| int | send_permitted (CBQClass *, double) |
| CBQClass * | find_lender (CBQClass *, double) |
| void | toplevel_departure (CBQClass *, double) |
| int | eligible_formal (CBQClass *, double) |
| int | eligible_ancestors (CBQClass *, double) |
| int | eligible_toplevel (CBQClass *cl, double) |
| void | utilUpdate (double int_begin, double int_end, int link_state) |
| virtual void | drop (Packet *p, const char *s) |
| void | send (Packet *p, Handler *h) |
| void | handle (Event *) |
Protected Attributes | |
| Event | intr_ |
| CBQClass * | last_lender_ |
| Packet * | pending_pkt_ |
| LinkDelay * | link_ |
| CBQClass * | active_ [MAXPRIO] |
| CBQClass * | levels_ [MAXLEVEL+1] |
| int | maxprio_ |
| int | maxpkt_ |
| int | maxlevel_ |
| int | toplevel_ |
| eligible_type_ | eligible_ |
| int | qlim_ |
| int | blocked_ |
| int | unblock_on_resume_ |
| QueueHandler | qh_ |
| PacketQueue * | pq_ |
| double | true_ave_ |
| double | total_time_ |
| double | last_change_ |
| double | old_util_ |
| double | util_weight_ |
| QueueElem< T > * | head_ |
| QueueElem< T > * | tail_ |
| int | size_ |
| NsObject * | target_ |
| NsObject * | drop_ |
| int | debug_ |
|
|
Definition at line 175 of file cbq.cc.
|
|
|
Definition at line 200 of file cbq.cc. References active_, levels_, MAXLEVEL, maxpkt_, and NONE.
00200 : last_lender_(NULL), pending_pkt_(NULL), link_(NULL), 00201 maxprio_(-1), maxpkt_(-1), maxlevel_(-1), toplevel_(MAXLEVEL), 00202 // eligible_((eligible_type_)NULL) 00203 eligible_(NONE) 00204 { 00205 bind("maxpkt_", &maxpkt_); 00206 memset(active_, '\0', sizeof(active_)); 00207 memset(levels_, '\0', sizeof(levels_)); 00208 } |
|
||||||||||||
|
Reimplemented in WRR_CBQueue. Definition at line 146 of file cbq.cc. Referenced by insert_class(), and CBQClass::newallot().
00146 { }
|
|
|
Definition at line 247 of file cbq.cc. References ANCESTORS, eligible_, FORMAL, and TOPLEVEL. Referenced by command().
00248 {
00249
00250 if (*arg == '0' || (strcmp(arg, "ancestor-only") == 0)) {
00251 // eligible_ = &eligible_ancestors;
00252 eligible_ = ANCESTORS;
00253 return (1);
00254 } else if (*arg == '1' || (strcmp(arg, "top-level") == 0)) {
00255 // eligible_ = &eligible_toplevel;
00256 eligible_ = TOPLEVEL;
00257 return (1);
00258 } else if (*arg == '2' || (strcmp(arg, "formal") == 0)) {
00259 // eligible_ = &eligible_formal;
00260 eligible_ = FORMAL;
00261 return (1);
00262 } else if (*arg == '3' || (strcmp(arg, "old-formal") == 0)) {
00263 fprintf(stderr, "CBQ: old-formal LS not supported\n");
00264 return (-1);
00265 }
00266 return (-1);
00267 }
|
|
|||||||||
|
Definition at line 131 of file queue.h. References Queue< T >::blocked_.
00131 { blocked_ = 1; }
|
|
|||||||||
|
Definition at line 129 of file queue.h. References Queue< T >::blocked_. Referenced by CBQClass::recv().
00129 { return (blocked_ == 1); }
|
|
|||||||||
|
Definition at line 135 of file queue.h. References PacketQueue::byteLength(), and Queue< T >::pq_.
00135 { return pq_->byteLength(); } /* number of bytes *
|
Here is the call graph for this function:

|
||||||||||||
|
Reimplemented from Connector. Reimplemented in WRR_CBQueue. Definition at line 566 of file cbq.cc. References algorithm(), Connector::command(), insert_class(), and link_. Referenced by WRR_CBQueue::command().
00567 {
00568
00569 Tcl& tcl = Tcl::instance();
00570 if (argc == 3) {
00571 if (strcmp(argv[1], "insert-class") == 0) {
00572 CBQClass *cl = (CBQClass*)TclObject::lookup(argv[2]);
00573 if (cl == 0) {
00574 tcl.resultf("CBQ: no class object %s",
00575 argv[2]);
00576 return (TCL_ERROR);
00577 }
00578 if (insert_class(cl) < 0) {
00579 tcl.resultf("CBQ: trouble inserting class %s",
00580 argv[2]);
00581 return (TCL_ERROR);
00582 }
00583 return (TCL_OK);
00584 }
00585 if (strcmp(argv[1], "link") == 0) {
00586 LinkDelay* del = (LinkDelay*)TclObject::lookup(argv[2]);
00587 if (del == 0) {
00588 tcl.resultf("CBQ: no LinkDelay object %s",
00589 argv[2]);
00590 return(TCL_ERROR);
00591 }
00592 link_ = del;
00593 return (TCL_OK);
00594 }
00595 if (strcmp(argv[1], "algorithm") == 0) {
00596 if (algorithm(argv[2]) < 0)
00597 return (TCL_ERROR);
00598 return (TCL_OK);
00599 }
00600 }
00601 return (Queue::command(argc, argv));
00602 }
|
Here is the call graph for this function:

|
||||||||||||
|
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 }
|
|
||||||||||||||||
|
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 }
|
|
|
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 }
|
|
|
Implements Queue< T >. Reimplemented in WRR_CBQueue. Definition at line 310 of file cbq.cc. References active_, Scheduler::clock(), CBQClass::delayed(), CBQClass::demand(), Scheduler::instance(), CBQClass::lender_, maxprio_, CBQClass::peer_, pending_pkt_, CBQClass::permit_borrowing_, CBQClass::pri_, CBQClass::q_, Queue< T >::resume(), send_permitted(), toplevel(), toplevel_departure(), and CBQClass::update().
00311 {
00312
00313 Scheduler& s = Scheduler::instance();
00314 double now = s.clock();
00315
00316 CBQClass* first = NULL;
00317 CBQClass* eligible = NULL;
00318 CBQClass* cl;
00319 register int prio;
00320 Packet* rval;
00321
00322 int none_found = 0;
00323
00324 /*
00325 * prio runs from 0 .. maxprio_
00326 *
00327 * round-robin through all the classes at priority 'prio'
00328 * if any class is ok to send, resume it's queue
00329 * go on to next lowest priority (higher prio nuber) and repeat
00330 * [lowest priority number is the highest priority]
00331 */
00332
00333 for (prio = 0; prio <= maxprio_; prio++) {
00334 // see if there is any class at this prio
00335 if ((cl = active_[prio]) == NULL) {
00336 // nobody at this prio level
00337 continue;
00338 }
00339
00340 // look for underlimit peer with something to send
00341 do {
00342 // anything to send?
00343 if (cl->demand()) {
00344 if (first == NULL && cl->permit_borrowing_ && cl->lender_ != NULL)
00345 first = cl;
00346 if (send_permitted(cl, now)) {
00347 // ok to send
00348 eligible = cl;
00349 goto found;
00350 } else {
00351 // not ok right now
00352 cl->delayed(now);
00353 }
00354 }
00355 cl = cl->peer_; // move to next at same prio
00356 } while (cl != active_[prio]);
00357 }
00358 // did not find anyone so let first go
00359 // eligible will be NULL at this point
00360 if (first != NULL) {
00361 none_found = 1;
00362 eligible = first;
00363 }
00364
00365 found:
00366 if (eligible != NULL) {
00367 active_[eligible->pri_] = eligible->peer_;
00368 // eligible->q_->unblock();
00369 eligible->q_->resume(); // fills in pending
00370 if (pending_pkt_ && !none_found) {
00371 eligible->update(pending_pkt_, now);
00372 if (toplevel())
00373 toplevel_departure(eligible, now);
00374 }
00375 }
00376 rval = pending_pkt_;
00377 pending_pkt_ = NULL;
00378
00379 return (rval);
00380 }
|
Here is the call graph for this function:

|
|||||||||
|
Definition at line 378 of file mcache.h. References Queue< T >::head_, QueueElem< T >::next(), QueueElem< T >::next_, Queue< T >::size_, and Queue< T >::tail_. Referenced by Queue< T >::detach(), and MediaServer::get_next_segment().
|
Here is the call graph for this function:

|
|||||||||
|
Definition at line 358 of file mcache.h. References QueueElem< T >::data(), Queue< T >::head_, and QueueElem< T >::next().
00358 {
00359 QueueElem<T> *p = head_, *q;
00360 while (p != NULL) {
00361 q = p;
00362 p = p->next();
00363 delete q->data();
00364 delete q;
00365 }
00366 head_ = NULL;
00367 }
|
Here is the call graph for this function:

|
||||||||||
|
Definition at line 390 of file mcache.h. References Queue< T >::dequeue(), Queue< T >::head_, QueueElem< T >::next_, Queue< T >::size_, and Queue< T >::tail_. Referenced by MediaServer::command().
00390 {
00391 assert(head_ != 0);
00392 if (head_ == e) {
00393 dequeue();
00394 return;
00395 }
00396 QueueElem<T> *p = head_;
00397 while (p != NULL) {
00398 if (p->next_ != e)
00399 p = p->next_;
00400 else
00401 break;
00402 }
00403 assert(p != NULL);
00404 p->next_ = e->next_;
00405 if (tail_ == e)
00406 tail_ = p;
00407 size_--;
00408 if (size_ == 0)
00409 assert((head_ == 0) && (tail_ == 0));
00410 }
|
Here is the call graph for this function:

|
||||||||||||
|
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:

|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 178 of file cbq.cc. Referenced by find_lender().
00178 { return (1); }
|
|
||||||||||||
|
Definition at line 464 of file cbq.cc. References LEAF_LEVEL, level(), CBQClass::level_, CBQClass::level_peer_, levels_, and CBQClass::satisfied(). Referenced by find_lender().
00465 {
00466 int level;
00467 CBQClass *p;
00468
00469 // check from leaf level to (cl->level - 1)
00470 for (level = LEAF_LEVEL; level < cl->level_; level++) {
00471 p = levels_[level];
00472 while (p != NULL) {
00473 if (!p->satisfied(now))
00474 return (0);
00475 p = p->level_peer_;
00476 }
00477 }
00478 return (1);
00479 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 179 of file cbq.cc. References CBQClass::level_, and toplevel_. Referenced by find_lender().
|
|
|
Implements Queue< T >. Definition at line 140 of file cbq.cc. References abort().
00140 { abort(); }
|
Here is the call graph for this function:

|
||||||||||
|
Definition at line 369 of file mcache.h. References QueueElem< T >::append(), Queue< T >::head_, Queue< T >::size_, and Queue< T >::tail_. Referenced by MediaServer::command(), and MediaServer::get_next_segment().
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 413 of file cbq.cc. References abort(), ANCESTORS, eligible_, eligible_ancestors(), eligible_formal(), eligible_toplevel(), FORMAL, CBQClass::lender_, CBQClass::level_, CBQClass::permit_borrowing_, TOPLEVEL, toplevel(), toplevel_, and CBQClass::undertime_. Referenced by send_permitted().
00414 {
00415 if ((!cl->permit_borrowing_) || ((cl = cl->lender_) == NULL))
00416 return (NULL); // no ancestor to borrow from
00417
00418 while (cl != NULL) {
00419 // skip past overlimit ancestors
00420 // if using TL and we're above the TL limit
00421 // do early out
00422 if (cl->undertime_ > now) {
00423 if (toplevel() && cl->level_ > toplevel_)
00424 return (NULL);
00425 cl = cl->lender_;
00426 continue;
00427 }
00428
00429 // found what may be an eligible
00430 // lender, check using per-algorithm eligibility
00431 // criteria
00432 // XXX we explicitly invoke this indirect method with
00433 // the "this" pointer because MS VC++ can't parse it
00434 // without it...
00435 // if ((this->*eligible_)(cl, now))
00436 // return (cl);
00437 switch (eligible_) {
00438 case TOPLEVEL:
00439 if (eligible_toplevel(cl, now))
00440 return (cl);
00441 break;
00442 case ANCESTORS:
00443 if (eligible_ancestors(cl, now))
00444 return (cl);
00445 break;
00446 case FORMAL:
00447 if (eligible_formal(cl, now))
00448 return (cl);
00449 break;
00450 default:
00451 fprintf(stderr, "Wrong eligible_\n");
00452 abort();
00453 }
00454 cl = cl->lender_;
00455 }
00456 return (cl);
00457 }
|
Here is the call graph for this function:

|
|||||||||
|
Definition at line 411 of file mcache.h. References Queue< T >::head_. Referenced by MediaServer::find_prefinfo().
00411 { return head_; }
|
|
|
Implements Handler. Reimplemented in LinkDelay, LL, AckRecons, and Snoop. Definition at line 91 of file object.cc. References NsObject::recv().
|
Here is the call graph for this function:

|
|
Reimplemented in WRR_CBQueue. Definition at line 486 of file cbq.cc. References active_, addallot(), CBQClass::allotment_, LinkDelay::bandwidth(), CBQClass::cbq_, CBQClass::level_, CBQClass::level_peer_, levels_, link_, MAXLEVEL, maxlevel_, MAXPRIO, maxprio_, CBQClass::maxrate_, CBQClass::peer_, CBQClass::pri_, and CBQClass::q_. Referenced by command(), and WRR_CBQueue::insert_class().
00487 {
00488 p->cbq_ = this;
00489
00490 /*
00491 * Add to circularly-linked list "active_"
00492 * of peers for the given priority.
00493 */
00494
00495 if (p->pri_ < 0 || p->pri_ > (MAXPRIO-1)) {
00496 fprintf(stderr, "CBQ class %s has invalid pri %d\n",
00497 p->name(), p->pri_);
00498 return (-1);
00499 }
00500
00501 if (p->q_ != NULL) {
00502 // only leaf nodes (which have associated queues)
00503 // are scheduled
00504 if (active_[p->pri_] != NULL) {
00505 p->peer_ = active_[p->pri_]->peer_;
00506 active_[p->pri_]->peer_ = p;
00507 } else {
00508 p->peer_ = p;
00509 active_[p->pri_] = p;
00510 }
00511 if (p->pri_ > maxprio_)
00512 maxprio_ = p->pri_;
00513 }
00514
00515 /*
00516 * Compute maxrate from allotment.
00517 * convert to bytes/sec
00518 * and store the highest prio# we've seen
00519 */
00520
00521 if (p->allotment_ < 0.0 || p->allotment_ > 1.0) {
00522 fprintf(stderr, "CBQ class %s has invalid allot %f\n",
00523 p->name(), p->allotment_);
00524 return (-1);
00525 }
00526
00527 if (link_ == NULL) {
00528 fprintf(stderr, "CBQ obj %s has no link!\n", name());
00529 return (-1);
00530 }
00531 if (link_->bandwidth() <= 0.0) {
00532 fprintf(stderr, "CBQ obj %s has invalid link bw %f on link %s\n",
00533 name(), link_->bandwidth(), link_->name());
00534 return (-1);
00535 }
00536
00537 p->maxrate_ = p->allotment_ * (link_->bandwidth() / 8.0);
00538 addallot(p->pri_, p->allotment_);
00539
00540 /*
00541 * Add to per-level list
00542 * and store the highest level# we've seen
00543 */
00544
00545 if (p->level_ <= 0 || p->level_ > MAXLEVEL) {
00546 fprintf(stderr, "CBQ class %s has invalid level %d\n",
00547 p->name(), p->level_);
00548 return (-1);
00549 }
00550
00551 p->level_peer_ = levels_[p->level_];
00552 levels_[p->level_] = p;
00553 if (p->level_ > maxlevel_)
00554 maxlevel_ = p->level_;
00555
00556 /*
00557 * Check that parent and borrow linkage are acyclic.
00558 */
00559 #ifdef notdef
00560 check_for_cycles(CBQClass::parent);
00561 check_for_cycles(CBQClass::borrow);
00562 #endif
00563 return 0;
00564 }
|
Here is the call graph for this function:

|
|||||||||
|
Definition at line 412 of file mcache.h. References Queue< T >::size_. Referenced by MediaServer::command(), and MediaServer::get_next_segment().
00412 { return (size_ == 0); }
|
|
|
Definition at line 61 of file object.h. References NsObject::debug_.
00061 { return debug_; }
|
|
|||||||||
|
Reimplemented in DRR, and SRR. Definition at line 133 of file queue.h. References PacketQueue::length(), and Queue< T >::pq_. Referenced by REMQueue::run_updaterule(), Snoop::snoop_data(), and JoBS::updateStats().
|
Here is the call graph for this function:

|
|
Definition at line 143 of file cbq.cc. References levels_. Referenced by CBQClass::desc_with_demand(), and eligible_formal().
00143 { return levels_[n]; }
|
|
|||||||||
|
Definition at line 132 of file queue.h. References Queue< T >::qlim_. Referenced by dsREDQueue::reset(), and Snoop::snoop_data().
00132 { return qlim_; }
|
|
|
Definition at line 142 of file cbq.cc. References link_. Referenced by CBQClass::newallot(), and CBQClass::update().
00142 { return (link_); }
|
|
|
Definition at line 147 of file cbq.cc. References pending_pkt_.
00147 { return (pending_pkt_); }
|
|
||||||||||||
|
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:

|
||||||||||||
|
Reimplemented from Queue< T >. Definition at line 228 of file cbq.cc. References abort(), Queue< T >::blocked_, and pending_pkt_.
00229 {
00230
00231 if (pending_pkt_ != NULL)
00232 abort();
00233
00234 blocked_ = 1;
00235 pending_pkt_ = p;
00236 }
|
Here is the call graph for this function:

|
|
Reimplemented in Agent, and Trace. Definition at line 56 of file object.h. Referenced by Trace::recvOnly().
00056 {};
|
|
|
Reimplemented from Queue< T >. Definition at line 239 of file cbq.cc.
00240 {
00241 // don't do anything
00242 // in particular, don't let Queue::reset() call
00243 // our deque() method
00244 }
|
|
|||||||||
|
Definition at line 154 of file queue.cc. References Queue< T >::blocked_, Scheduler::clock(), Queue< T >::deque(), Scheduler::instance(), Queue< T >::last_change_, Queue< T >::qh_, NsObject::recv(), Connector::target_, Queue< T >::unblock_on_resume_, and Queue< T >::utilUpdate(). Referenced by WRR_CBQueue::deque(), deque(), and QueueHandler::handle().
00155 {
00156 double now = Scheduler::instance().clock();
00157 Packet* p = deque();
00158 if (p != 0) {
00159 target_->recv(p, &qh_);
00160 } else {
00161 if (unblock_on_resume_) {
00162 utilUpdate(last_change_, now, blocked_);
00163 last_change_ = now;
00164 blocked_ = 0;
00165 }
00166 else {
00167 utilUpdate(last_change_, now, blocked_);
00168 last_change_ = now;
00169 blocked_ = 1;
00170 }
00171 }
00172 }
|
Here is the call graph for this function:

|
|
Definition at line 215 of file cbq.cc. References Queue< T >::blocked_, Scheduler::instance(), intr_, Queue< T >::qh_, and Scheduler::schedule(). Referenced by CBQClass::recv().
00216 {
00217 Scheduler& s = Scheduler::instance();
00218 blocked_ = 1;
00219 s.schedule(&qh_, &intr_, 0);
00220 }
|
Here is the call graph for this function:

|
||||||||||||
|
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().
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 390 of file cbq.cc. References CBQClass::delayed_, find_lender(), last_lender_, CBQClass::permit_borrowing_, and CBQClass::undertime_. Referenced by WRR_CBQueue::deque(), and deque().
00391 {
00392 if (cl->undertime_ < now) {
00393 cl->delayed_ = 0;
00394 last_lender_ = cl;
00395 return (1);
00396 } else if (cl->permit_borrowing_ &&
00397 (((cl = find_lender(cl, now)) != NULL))) {
00398 last_lender_ = cl;
00399 return (1);
00400 }
00401 return (0);
00402 }
|
Here is the call graph for this function:

|
|||||||||
|
Definition at line 413 of file mcache.h. References Queue< T >::size_. Referenced by JoBS::arvAccounting(), JoBS::assignRateDropsADC(), dsREDQueue::deque(), JoBS::dropFront(), JoBS::dropTail(), RedPDQueue::enque(), JoBS::enque(), MediaServer::get_next_segment(), JoBS::pickDroppedRLC(), and FQ::recv().
00413 { return size_; }
|
|
|
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_; }
|
|
|
Definition at line 149 of file cbq.cc. References eligible_, and TOPLEVEL. Referenced by WRR_CBQueue::deque(), deque(), find_lender(), and CBQClass::recv().
|
|
||||||||||||
|
Definition at line 289 of file cbq.cc. References CBQClass::lender_, CBQClass::permit_borrowing_, toplevel_, and CBQClass::undertime_. Referenced by CBQClass::recv().
00290 {
00291 if (toplevel_ > 1) {
00292 if (cl->undertime_ < now)
00293 toplevel_ = 1;
00294 else if (toplevel_ > 2 && cl->permit_borrowing_ && cl->lender_ != NULL) {
00295 if (cl->lender_->undertime_ < now)
00296 toplevel_ = 2;
00297 }
00298 }
00299 }
|
|
||||||||||||
|
Definition at line 276 of file cbq.cc. References last_lender_, CBQClass::level_, MAXLEVEL, QueueMonitor::pkts(), CBQClass::qmon_, toplevel_, and CBQClass::undertime_. Referenced by WRR_CBQueue::deque(), and deque().
00277 {
00278 if (toplevel_ >= last_lender_->level_) {
00279 if ((cl->qmon_->pkts() <= 1) ||
00280 last_lender_->undertime_ > now) {
00281 toplevel_ = MAXLEVEL;
00282 } else {
00283 toplevel_ = last_lender_->level_;
00284 }
00285 }
00286 }
|
Here is the call graph for this function:

|
|||||||||
|
Definition at line 130 of file queue.h. References Queue< T >::blocked_.
00130 { blocked_ = 0; }
|
|
||||||||||
|
Definition at line 141 of file queue.cc. References Scheduler::clock(), Scheduler::instance(), Queue< T >::total_time_, and Queue< T >::true_ave_. Referenced by REDQueue::deque(), DropTail::deque(), REDQueue::enque(), and DropTail::enque().
00142 {
00143 double now = Scheduler::instance().clock();
00144 double newtime = now - total_time_;
00145 if (newtime > 0.0) {
00146 double oldave = true_ave_;
00147 double oldtime = total_time_;
00148 double newtime = now - total_time_;
00149 true_ave_ = (oldtime * oldave + newtime * queuesize) /now;
00150 total_time_ = now;
00151 }
00152 }
|
Here is the call graph for this function:

|
||||||||||
|
Definition at line 130 of file queue.cc. References Queue< T >::blocked_, Scheduler::clock(), Scheduler::instance(), Queue< T >::last_change_, Queue< T >::old_util_, and Queue< T >::utilUpdate(). Referenced by QSAgent::recv().
00131 {
00132 double now = Scheduler::instance().clock();
00133
00134 utilUpdate(last_change_, now, blocked_);
00135 last_change_ = now;
00136
00137 return old_util_;
00138
00139 }
|
Here is the call graph for this function:

|
||||||||||||||||||||
|
Definition at line 122 of file queue.cc. References Queue< T >::old_util_, and Queue< T >::util_weight_. Referenced by Queue< T >::recv(), Queue< T >::resume(), and Queue< T >::utilization().
|
|
|
Definition at line 166 of file cbq.cc. Referenced by CBQueue(), WRR_CBQueue::deque(), deque(), and insert_class(). |
|
|||||
|
Definition at line 143 of file queue.h. Referenced by Queue< T >::block(), Queue< T >::blocked(), Queue< T >::Queue(), Queue< T >::recv(), FQ::recv(), recv(), PriQueue::recvHighPriority(), Queue< T >::resume(), sched(), Queue< T >::unblock(), and Queue< T >::utilization(). |
|
|
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(). |
|
|
Definition at line 57 of file connector.h. Referenced by Connector::command(), Connector::drop(), and ErrorModel::recv(). |
|
|
Definition at line 176 of file cbq.cc. Referenced by algorithm(), find_lender(), and toplevel(). |
|
|||||
|
Definition at line 416 of file mcache.h. Referenced by Queue< T >::dequeue(), Queue< T >::destroy(), Queue< T >::detach(), Queue< T >::enqueue(), Queue< T >::getHead(), Queue< T >::Queue(), Queue< T >::reset(), and Queue< T >::~Queue(). |
|
|
Definition at line 155 of file cbq.cc. Referenced by sched(). |
|
|||||
|
Definition at line 154 of file queue.h. Referenced by Queue< T >::recv(), Queue< T >::resume(), and Queue< T >::utilization(). |
|
|
Definition at line 162 of file cbq.cc. Referenced by send_permitted(), and toplevel_departure(). |
|
|
Definition at line 167 of file cbq.cc. Referenced by CBQueue(), eligible_formal(), insert_class(), and level(). |
|
|
Definition at line 164 of file cbq.cc. Referenced by command(), insert_class(), and link(). |
|
|
Definition at line 170 of file cbq.cc. Referenced by insert_class(). |
|
|
Definition at line 169 of file cbq.cc. Referenced by CBQueue(), and WRR_CBQueue::setM(). |
|
|
Definition at line 168 of file cbq.cc. Referenced by WRR_CBQueue::deque(), deque(), insert_class(), and WRR_CBQueue::setM(). |
|
|||||
|
Definition at line 155 of file queue.h. Referenced by Queue< T >::utilization(), and Queue< T >::utilUpdate(). |
|
|
Definition at line 163 of file cbq.cc. Referenced by WRR_CBQueue::deque(), deque(), pending_pkt(), and recv(). |
|
|||||
|
|||||
|
Definition at line 145 of file queue.h. Referenced by Queue< T >::recv(), FQ::recv(), PriQueue::recvHighPriority(), Queue< T >::resume(), and sched(). |
|
|||||
|
Definition at line 142 of file queue.h. Referenced by Vq::checkPacketForECN(), Vq::enque(), SRR::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), PIQueue::enque(), Marker::enque(), JoBS::enque(), GK::enque(), DropTail::enque(), Demarker::enque(), Queue< T >::limit(), RIOQueue::print_edp(), REDQueue::print_edp(), Queue< T >::Queue(), and PriQueue::recvHighPriority(). |
|
|||||
|
Definition at line 417 of file mcache.h. Referenced by Queue< T >::dequeue(), Queue< T >::detach(), Queue< T >::enqueue(), Queue< T >::is_empty(), Queue< T >::Queue(), and Queue< T >::size(). |
|
|||||
|
Definition at line 416 of file mcache.h. Referenced by Queue< T >::dequeue(), Queue< T >::detach(), Queue< T >::enqueue(), and Queue< T >::Queue(). |
|
|
|
Definition at line 171 of file cbq.cc. Referenced by eligible_toplevel(), find_lender(), toplevel_arrival(), and toplevel_departure(). |
|
|||||
|
Definition at line 150 of file queue.h. Referenced by REDQueue::print_summarystats(), DropTail::print_summarystats(), Queue< T >::reset(), and Queue< T >::updateStats(). |
|
|||||
|
Definition at line 149 of file queue.h. Referenced by REDQueue::print_summarystats(), DropTail::print_summarystats(), Queue< T >::reset(), and Queue< T >::updateStats(). |
|
|||||
|
Definition at line 144 of file queue.h. Referenced by Queue< T >::Queue(), and Queue< T >::resume(). |
|
|||||
|
Definition at line 156 of file queue.h. Referenced by Queue< T >::Queue(), and Queue< T >::utilUpdate(). |
1.3.3