routing-queue.h

00001 /*
00002  * Copyright (c) 2008 Regents of the SIGNET lab, University of Padova.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. Neither the name of the University of Padova (SIGNET lab) nor the 
00014  *    names of its contributors may be used to endorse or promote products 
00015  *    derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
00018  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
00019  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
00020  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
00021  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00022  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
00023  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
00024  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
00026  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
00027  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00028  */
00029 
00030 #ifndef _MRCL_ROUTINGQUEUE_
00031 #define _MRCL_ROUTINGQUEUE_
00032 
00033 #include <packet.h>
00034 #include "mrcl-address.h"
00035 
00036 /*
00037  * The maximum number of packets that we allow a routing protocol to buffer.
00038  */
00039 #define RTR_RTQ_MAX_LEN     64      // packets
00040 
00041 /*
00042  *  The maximum period of time that a routing protocol is allowed to buffer
00043  *  a packet for.
00044  */
00045 #define RTR_RTQ_TIMEOUT     30  // seconds
00046 
00047 #define DROP_RTR_QFULL_VERBOSITY 5
00048 #define DROP_RTR_QFULL "QFULL"
00049 #define DROP_RTR_QTIMEOUT "QTOUT"
00050 #define DROP_RTR_QTIMEOUT_VERBOSITY 5
00051 #define DROP_RTR_QAGED_VERBOSITY 5
00052 #define DROP_RTR_QAGED "AGED"
00053 
00054 struct PktQueue
00055 {
00056         Packet *p;
00057         PktQueue *next;
00058         PktQueue *prev;
00059 };
00060 
00061 class MrclRouting;
00062 
00063 class RoutingQueue : public TclObject {
00064  public:
00065         RoutingQueue(MrclRouting *m);
00066 
00067         virtual void enque(Packet *p);
00068         /*
00069          *  Returns a packet from the head of the queue.
00070          */
00071         virtual Packet* deque();
00072 
00073         /*
00074          * Returns a packet for destination "D".
00075          */
00076         virtual Packet* deque(MrclAddress *dst);
00077         virtual Packet* deque(char *dst);
00078         /*
00079         * Finds whether a packet with destination dst exists in the queue
00080         */
00081         virtual char find(MrclAddress *dst);
00082         virtual char find(char *dst);
00083 
00084  private:
00085         virtual Packet* remove_head();
00086         virtual void purge();
00087         virtual void findPacketWithDst(char *dst, PktQueue *& pq);
00088         virtual int findAgedPacket(PktQueue *& pq); 
00089         virtual void verifyQueue();
00090 
00091         PktQueue head_;
00092         PktQueue tail_;
00093 
00094         int len_;
00095 
00096         int limit_;
00097         double timeout_;
00098         MrclRouting *module_;
00099 };
00100 
00101 #endif /* _MRCL_ROUTINGQUEUE_ */

Generated on Wed Nov 26 15:47:29 2008 for NS-MIRACLE library by  doxygen 1.5.2