1 #ifndef __LINUX_SHAPER_H
2 #define __LINUX_SHAPER_H
3 
4 #ifdef __KERNEL__
5 
6 #define SHAPER_QLEN	10
7 /*
8  *	This is a bit speed dependent (read it shouldn't be a constant!)
9  *
10  *	5 is about right for 28.8 upwards. Below that double for every
11  *	halving of speed or so. - ie about 20 for 9600 baud.
12  */
13 #define SHAPER_LATENCY	(5L*HZ)
14 #define SHAPER_MAXSLIP	2
15 #define SHAPER_BURST	(HZ/50)		/* Good for >128K then */
16 
17 struct shaper
18 {
19 	struct sk_buff_head sendq;
20 	__u32 bytespertick;
21 	__u32 bitspersec;
22 	__u32 shapelatency;
23 	__u32 shapeclock;
24 	unsigned long recovery;		/* Time we can next clock a packet out on
25 					   an empty queue */
26         unsigned long locked;
27         struct net_device_stats stats;
28 	struct net_device *dev;
29 	int  (*hard_start_xmit) (struct sk_buff *skb,
30 		struct net_device *dev);
31 	int  (*hard_header) (struct sk_buff *skb,
32 		struct net_device *dev,
33 		unsigned short type,
34 		void *daddr,
35 		void *saddr,
36 		unsigned len);
37 	int  (*rebuild_header)(struct sk_buff *skb);
38 	int (*hard_header_cache)(struct neighbour *neigh, struct hh_cache *hh);
39 	void (*header_cache_update)(struct hh_cache *hh, struct net_device *dev, unsigned char *  haddr);
40 	struct net_device_stats* (*get_stats)(struct net_device *dev);
41 	wait_queue_head_t  wait_queue;
42 	struct timer_list timer;
43 };
44 
45 #endif
46 
47 #define SHAPER_SET_DEV		0x0001
48 #define SHAPER_SET_SPEED	0x0002
49 #define SHAPER_GET_DEV		0x0003
50 #define SHAPER_GET_SPEED	0x0004
51 
52 struct shaperconf
53 {
54 	__u16	ss_cmd;
55 	union
56 	{
57 		char 	ssu_name[14];
58 		__u32	ssu_speed;
59 	} ss_u;
60 #define ss_speed ss_u.ssu_speed
61 #define ss_name ss_u.ssu_name
62 };
63 
64 #endif
65