next up previous contents index
Next: 7.3 Different types of Up: 7. Queue Management and Previous: 7.1.2 PacketQueue Class

   
7.2 Example: Drop Tail

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.




2000-08-24