The following example illustrates the implementation of the Queue/DropTail object, which implements FIFO scheduling and drop-on-overflow buffer management typical of most present-day Internet routers. The following definitions declare the class and its OTcl linkage:
/*
* A bounded, drop-tail queue
*/
class DropTail : public Queue {
protected:
void enque(Packet*);
Packet* deque();
PacketQueue q_;
};
The base class Queue,
from which DropTail is derived, provides most
of the needed functionality.
The drop-tail queue maintains exactly one FIFO queue, implemented
by including an object of the PacketQueue class.
Drop-tail implements its own versions of enque and deque
as follows:
/*
* drop-tail
*/
void DropTail::enque(Packet* p)
{
q_.enque(p);
if (q_.length() \>= qlim_) {
q_.remove(p);
drop(p);
}
}
Packet* DropTail::deque()
{
return (q_.deque());
}
Here, the enque function first stores the packet in the
internal packet queue (which has no size restrictions), and then
checks the size of the packet queue versus qlim_.
Drop-on-overflow is implemented by dropping the packet most recently
added to the packet queue if the limit is reached or exceeded.
Simple FIFO scheduling is implemented in the deque function
by always returning the first packet in the packet queue.