X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/ed90ea49e025e0c8083f9d98768d870e6a880f13..b95726afbe7dd4e338ce26f65e773965988e1c36:/tbf.h?ds=sidebyside

diff --git a/tbf.h b/tbf.h
index 3d98c1b..925e4f7 100644
--- a/tbf.h
+++ b/tbf.h
@@ -1,10 +1,42 @@
 #ifndef __TBF_H__
 #define __TBF_H__
 
-void init_tbf(void);
+// Need a time interval.
+
+#define TBF_MAX_QUEUE   2       // Maximum of 2 queued packet per
+#define TBF_MAX_SIZE    3000    // Maxiumum queued packet size is 2048.
+
+#define TBF_MAX_CREDIT  6000    // Maximum 6000 bytes of credit.
+#define TBF_RATE        360     // 360 bytes per 1/10th of a second.
+
+typedef struct {
+	int		credit;
+	int		lasttime;
+	int		queued;
+	int		oldest;		// Position of packet in the ring buffer.
+	sessionidt	sid;		// associated session ID.
+	int		max_credit;	// Maximum amount of credit available (burst size).
+	int		rate;		// How many bytes of credit per second we get? (sustained rate)
+	void		(*send)(sessionidt s, uint8_t *, int); // Routine to actually send out the data.
+	int		prev;		// Timer chain position.
+	int		next;		// Timer chain position.
+
+	uint32_t	b_queued;	// Total bytes sent through this TBF
+	uint32_t	b_sent;		// Total bytes sucessfully made it to the network.
+	uint32_t	p_queued;	// ditto packets.
+	uint32_t	p_sent;		// ditto packets.
+	uint32_t	b_dropped;	// Total bytes dropped.
+	uint32_t	p_dropped;	// Total packets dropped.
+	uint32_t	p_delayed;	// Total packets not sent immediately.
+
+	int		sizes[TBF_MAX_QUEUE];
+	uint8_t		packets[TBF_MAX_QUEUE][TBF_MAX_SIZE];
+} tbft;
+
+void init_tbf(int num_tbfs);
 int tbf_run_timer(void);
-int tbf_queue_packet(int tbf_id, char * data, int size);
-int new_tbf(int sid, int max_credit, int rate, void (*f)(sessionidt, u8 *, int));
+int tbf_queue_packet(int tbf_id, uint8_t * data, int size);
+int new_tbf(int sid, int max_credit, int rate, void (*f)(sessionidt, uint8_t *, int));
 int free_tbf(int tid);
 void fsck_tbfs(void);