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

PacketSFQ Class Reference

Inheritance diagram for PacketSFQ:

Inheritance graph
[legend]
Collaboration diagram for PacketSFQ:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual int length () const
virtual int byteLength () const
virtual Packetenque (Packet *p)
virtual Packetdeque ()
Packetlookup (int n)
virtual void remove (Packet *)
void remove (Packet *, Packet *)
Packethead ()
Packettail ()
virtual void enqueHead (Packet *p)
void resetIterator ()
PacketgetNext ()

Protected Member Functions

void sfqdebug ()
PacketSFQactivate (PacketSFQ *head)
PacketSFQidle (PacketSFQ *head)

Protected Attributes

int pkts
PacketSFQprev
PacketSFQnext
Packethead_
Packettail_
int len_
int bytes_

Private Member Functions

 PacketSFQ ()

Friends

class SFQ

Constructor & Destructor Documentation

PacketSFQ::PacketSFQ  )  [inline, private]
 

Definition at line 51 of file sfq.cc.

References next, pkts, and prev.

00051 : pkts(0), prev(0), next(0) {}


Member Function Documentation

PacketSFQ* PacketSFQ::activate PacketSFQ head  )  [inline, protected]
 

Definition at line 58 of file sfq.cc.

References next, and prev.

Referenced by SFQ::enque().

00058                                                {
00059     if (head) {
00060       this->prev = head->prev;
00061       this->next = head;
00062       head->prev->next = this;
00063       head->prev = this;
00064       return head;
00065     }
00066     this->prev = this;
00067     this->next = this;
00068     return this;
00069   }

virtual int PacketQueue::byteLength  )  const [inline, virtual, inherited]
 

Definition at line 49 of file queue.h.

References PacketQueue::bytes_.

Referenced by REDQueue::bcount_(), Queue< T >::byteLength(), PIQueue::calculate_p(), REDQueue::deque(), PIQueue::deque(), DropTail::deque(), REDQueue::drop_early(), RIOQueue::enque(), REDQueue::enque(), RedPDQueue::enque(), PushbackQueue::enque(), PIQueue::enque(), and DropTail::enque().

00049 { return (bytes_); }

virtual Packet* PacketQueue::deque void   )  [inline, virtual, inherited]
 

Reimplemented in SemanticPacketQueue.

Definition at line 62 of file queue.h.

References hdr_cmn::access(), PacketQueue::bytes_, PacketQueue::head_, PacketQueue::len_, Packet::next_, hdr_cmn::size(), and PacketQueue::tail_.

Referenced by imepAgent::aggregateAckBlock(), imepAgent::aggregateHelloBlock(), imepAgent::aggregateObjectBlock(), Vq::deque(), SimpleIntServ::deque(), SFQ::deque(), SemanticPacketQueue::deque(), REMQueue::deque(), REDQueue::deque(), PIQueue::deque(), Marker::deque(), JoBS::deque(), GK::deque(), redQueue::deque(), DRR::deque(), DropTail::deque(), Demarker::deque(), SemanticPacketQueue::deque_acksfirst(), GK::enque(), DRR::enque(), DropTail::enque(), DSDV_Agent::forwardPacket(), LinkDelay::handle(), DSDV_Agent::processUpdate(), PacketQueue::remove(), LinkDelay::reset(), and TBF::timeout().

00062                                 {
00063                 if (!head_) return 0;
00064                 Packet* p = head_;
00065                 head_= p->next_; // 0 if p == tail_
00066                 if (p == tail_) head_= tail_= 0;
00067                 --len_;
00068                 bytes_ -= hdr_cmn::access(p)->size();
00069                 return p;
00070         }

Here is the call graph for this function:

virtual Packet* PacketQueue::enque Packet p  )  [inline, virtual, inherited]
 

Reimplemented in SemanticPacketQueue.

Definition at line 50 of file queue.h.

References hdr_cmn::access(), PacketQueue::bytes_, PacketQueue::head_, PacketQueue::len_, Packet::next_, hdr_cmn::size(), and PacketQueue::tail_.

Referenced by Vq::enque(), SimpleIntServ::enque(), SFQ::enque(), SemanticPacketQueue::enque(), RIOQueue::enque(), REDQueue::enque(), PIQueue::enque(), Marker::enque(), JoBS::enque(), GK::enque(), redQueue::enque(), DRR::enque(), DropTail::enque(), Demarker::enque(), SemanticPacketQueue::enque_head(), DSDV_Agent::forwardPacket(), TBF::recv(), LinkDelay::recv(), imepAgent::recv_outgoing(), imepAgent::sendAck(), and imepAgent::sendHello().

00050                                          { // Returns previous tail
00051                 Packet* pt = tail_;
00052                 if (!tail_) head_= tail_= p;
00053                 else {
00054                         tail_->next_= p;
00055                         tail_= p;
00056                 }
00057                 tail_->next_= 0;
00058                 ++len_;
00059                 bytes_ += hdr_cmn::access(p)->size();
00060                 return pt;
00061         }

Here is the call graph for this function:

virtual void PacketQueue::enqueHead Packet p  )  [inline, virtual, inherited]
 

Definition at line 85 of file queue.h.

References hdr_cmn::access(), PacketQueue::bytes_, PacketQueue::head_, PacketQueue::len_, Packet::next_, hdr_cmn::size(), and PacketQueue::tail_.

Referenced by imepAgent::aggregateObjectBlock(), PushbackQueue::enque(), and PriQueue::recvHighPriority().

00085                                                  {
00086                 if (!head_) tail_ = p;
00087                 p->next_ = head_;
00088                 head_ = p;
00089                 ++len_;
00090                 bytes_ += hdr_cmn::access(p)->size();
00091         }

Here is the call graph for this function:

Packet* PacketQueue::getNext  )  [inline, inherited]
 

Definition at line 93 of file queue.h.

References PacketQueue::iter, and Packet::next_.

00093                           { 
00094                 if (!iter) return 0;
00095                 Packet *tmp = iter; iter = iter->next_;
00096                 return tmp;
00097         }

Packet* PacketQueue::head  )  [inline, inherited]
 

Reimplemented in SemanticPacketQueue.

Definition at line 82 of file queue.h.

References PacketQueue::head_.

Referenced by JoBS::adjustRatesRDC(), JoBS::arvAccounting(), JoBS::assignRateDropsADC(), JoBS::deque(), Vq::dropPacketForECN(), JoBS::enforceWC(), Vq::enque(), PriQueue::filter(), Vq::markPacketForECN(), JoBS::minRatesNeeded(), JoBS::pickDroppedRLC(), JoBS::projDelay(), TBF::timeout(), JoBS::updateError(), and TBF::~TBF().

00082 { return head_; }

PacketSFQ* PacketSFQ::idle PacketSFQ head  )  [inline, protected]
 

Definition at line 70 of file sfq.cc.

References next, and prev.

Referenced by SFQ::deque().

00070                                            {
00071     if (head == this) {
00072       if (this->next == this)
00073         return 0;
00074       this->next->prev = this->prev;
00075       this->prev->next = this->next;
00076       return this->next;
00077     }
00078     return head;
00079   }

virtual int PacketQueue::length  )  const [inline, virtual, inherited]
 

Definition at line 48 of file queue.h.

References PacketQueue::len_.

Referenced by imepAgent::aggregateAckBlock(), imepAgent::aggregateHelloBlock(), imepAgent::aggregateObjectBlock(), redQueue::calcAvg(), PIQueue::calculate_p(), Vq::deque(), SimpleIntServ::deque(), REMQueue::deque(), REDQueue::deque(), PIQueue::deque(), GK::deque(), DropTail::deque(), SemanticPacketQueue::deque_acksfirst(), REDQueue::drop_early(), Vq::dropPacketForECN(), Vq::enque(), SimpleIntServ::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), RedPDQueue::enque(), PushbackQueue::enque(), PIQueue::enque(), Marker::enque(), GK::enque(), redQueue::enque(), DropTail::enque(), Demarker::enque(), PriQueue::filter(), DSDV_Agent::forwardPacket(), redQueue::getRealLength(), imepAgent::handlerBeaconTimer(), imepAgent::handlerControlTimer(), Queue< T >::length(), SemanticPacketQueue::pickPacketForECN(), SemanticPacketQueue::pickPacketToDrop(), REDQueue::pickPacketToDrop(), PIQueue::pickPacketToDrop(), LinkDelay::pktintran(), TBF::recv(), PriQueue::recvHighPriority(), LinkDelay::reset(), TBF::timeout(), and TBF::~TBF().

00048 { return (len_); }

Packet* PacketQueue::lookup int  n  )  [inline, inherited]
 

Definition at line 71 of file queue.h.

References PacketQueue::head_, and Packet::next_.

Referenced by DRR::deque(), PriQueue::filter(), SemanticPacketQueue::pickPacketForECN(), SemanticPacketQueue::pickPacketToDrop(), REDQueue::pickPacketToDrop(), PIQueue::pickPacketToDrop(), LinkDelay::pktintran(), and PriQueue::recvHighPriority().

00071                               {
00072                 for (Packet* p = head_; p != 0; p = p->next_) {
00073                         if (--n < 0)
00074                                 return (p);
00075                 }
00076                 return (0);
00077         }

void PacketQueue::remove Packet ,
Packet
[inherited]
 

Reimplemented in SemanticPacketQueue.

Definition at line 67 of file queue.cc.

References hdr_cmn::access(), PacketQueue::bytes_, PacketQueue::deque(), PacketQueue::head_, PacketQueue::len_, Packet::next_, hdr_cmn::size(), and PacketQueue::tail_.

00067                                                        : screwy
00068 {
00069         if (pkt) {
00070                 if (head_ == pkt)
00071                         PacketQueue::deque(); /* decrements len_ internally */
00072                 else {
00073                         prev->next_ = pkt->next_;
00074                         if (tail_ == pkt)
00075                                 tail_ = prev;
00076                         --len_;
00077                         bytes_ -= hdr_cmn::access(pkt)->size();
00078                 }
00079         }
00080         return;
00081 }

Here is the call graph for this function:

void PacketQueue::remove Packet  )  [virtual, inherited]
 

Reimplemented in SemanticPacketQueue.

Definition at line 44 of file queue.cc.

References abort(), hdr_cmn::access(), PacketQueue::bytes_, PacketQueue::deque(), PacketQueue::head_, PacketQueue::len_, Packet::next_, hdr_cmn::size(), and PacketQueue::tail_.

Referenced by SemanticPacketQueue::deque_acksfirst(), Vq::dropPacketForECN(), Vq::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), PIQueue::enque(), Marker::enque(), GK::enque(), Demarker::enque(), PriQueue::filter(), SemanticPacketQueue::filterAcks(), PriQueue::recvHighPriority(), and SemanticPacketQueue::remove().

00045 {
00046         for (Packet *pp= 0, *p= head_; p; pp= p, p= p->next_) {
00047                 if (p == target) {
00048                         if (!pp) deque();
00049                         else {
00050                                 if (p == tail_) 
00051                                         tail_= pp;
00052                                 pp->next_= p->next_;
00053                                 --len_;
00054                                 bytes_ -= hdr_cmn::access(p)->size();
00055                         }
00056                         return;
00057                 }
00058         }
00059         fprintf(stderr, "PacketQueue:: remove() couldn't find target\n");
00060         abort();
00061 }

Here is the call graph for this function:

void PacketQueue::resetIterator  )  [inline, inherited]
 

Definition at line 92 of file queue.h.

References PacketQueue::head_, and PacketQueue::iter.

00092 {iter = head_;}

void PacketSFQ::sfqdebug  )  [protected]
 

Definition at line 167 of file sfq.cc.

References next, and pkts.

00168 {
00169   PacketSFQ *q = this;
00170   fprintf(stderr, "sfq: ");
00171   while (q) {
00172     fprintf(stderr, " 0x%p(%d)", q, q->pkts);
00173     q = q->next;
00174     if (q == this)
00175       break;
00176   }
00177   fprintf(stderr, "\n");
00178 }

Packet* PacketQueue::tail  )  [inline, inherited]
 

Definition at line 83 of file queue.h.

References PacketQueue::tail_.

00083 { return tail_; }


Friends And Related Function Documentation

friend class SFQ [friend]
 

Definition at line 52 of file sfq.cc.


Member Data Documentation

int PacketQueue::bytes_ [protected, inherited]
 

Definition at line 103 of file queue.h.

Referenced by PacketQueue::byteLength(), PacketQueue::deque(), PacketQueue::enque(), PacketQueue::enqueHead(), PacketQueue::PacketQueue(), and PacketQueue::remove().

Packet* PacketQueue::head_ [protected, inherited]
 

Definition at line 100 of file queue.h.

Referenced by PacketQueue::deque(), SemanticPacketQueue::deque_acksfirst(), PacketQueue::enque(), SemanticPacketQueue::enque_head(), PacketQueue::enqueHead(), SemanticPacketQueue::head(), PacketQueue::head(), SemanticPacketQueue::lookup(), PacketQueue::lookup(), PacketQueue::PacketQueue(), PacketQueue::remove(), and PacketQueue::resetIterator().

int PacketQueue::len_ [protected, inherited]
 

Definition at line 102 of file queue.h.

Referenced by PacketQueue::deque(), PacketQueue::enque(), SemanticPacketQueue::enque_head(), PacketQueue::enqueHead(), PacketQueue::length(), PacketQueue::PacketQueue(), and PacketQueue::remove().

PacketSFQ* PacketSFQ::next [protected]
 

Definition at line 57 of file sfq.cc.

Referenced by activate(), SFQ::deque(), idle(), PacketSFQ(), and sfqdebug().

int PacketSFQ::pkts [protected]
 

Definition at line 55 of file sfq.cc.

Referenced by SFQ::clear(), SFQ::deque(), SFQ::enque(), PacketSFQ(), and sfqdebug().

PacketSFQ* PacketSFQ::prev [protected]
 

Definition at line 56 of file sfq.cc.

Referenced by activate(), idle(), and PacketSFQ().

Packet* PacketQueue::tail_ [protected, inherited]
 

Definition at line 101 of file queue.h.

Referenced by PacketQueue::deque(), PacketQueue::enque(), PacketQueue::enqueHead(), PacketQueue::PacketQueue(), PacketQueue::remove(), and PacketQueue::tail().


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