1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
/* -*- c++ -*-
$Id: rtqueue.h,v 1.4 2001/08/15 18:35:00 kclan Exp $
*/
#ifndef __ifqueue_h__
#define __ifqueue_h__
#include <packet.h>
#include <agent.h>
/*
* The maximum number of packets that we allow a routing protocol to buffer.
*/
#define RTQ_MAX_LEN 64 // packets
/*
* The maximum period of time that a routing protocol is allowed to buffer
* a packet for.
*/
#define RTQ_TIMEOUT 30 // seconds
class rtqueue : public Connector {
public:
rtqueue();
void recv(Packet *, Handler*) { abort(); }
void enque(Packet *p);
inline int command(int argc, const char * const* argv)
{ return Connector::command(argc, argv); }
/*
* Returns a packet from the head of the queue.
*/
Packet* deque(void);
/*
* Returns a packet for destination "D".
*/
Packet* deque(nsaddr_t dst);
/*
* Finds whether a packet with destination dst exists in the queue
*/
char find(nsaddr_t dst);
private:
Packet* remove_head();
void purge(void);
void findPacketWithDst(nsaddr_t dst, Packet*& p, Packet*& prev);
void verifyQueue(void);
Packet *head_;
Packet *tail_;
int len_;
int limit_;
double timeout_;
};
#endif /* __ifqueue_h__ */
|