| #ifndef __LINUX_SHAPER_H | 
 | #define __LINUX_SHAPER_H | 
 |  | 
 | #ifdef __KERNEL__ | 
 |  | 
 | #define SHAPER_QLEN	10 | 
 | /* | 
 |  *	This is a bit speed dependent (read it shouldn't be a constant!) | 
 |  * | 
 |  *	5 is about right for 28.8 upwards. Below that double for every | 
 |  *	halving of speed or so. - ie about 20 for 9600 baud. | 
 |  */ | 
 | #define SHAPER_LATENCY	(5*HZ) | 
 | #define SHAPER_MAXSLIP	2 | 
 | #define SHAPER_BURST	(HZ/50)		/* Good for >128K then */ | 
 |  | 
 | struct shaper | 
 | { | 
 | 	struct sk_buff_head sendq; | 
 | 	__u32 bytespertick; | 
 | 	__u32 bitspersec; | 
 | 	__u32 shapelatency; | 
 | 	__u32 shapeclock; | 
 | 	unsigned long recovery;	/* Time we can next clock a packet out on | 
 | 				   an empty queue */ | 
 | 	spinlock_t lock; | 
 |         struct net_device_stats stats; | 
 | 	struct net_device *dev; | 
 | 	int  (*hard_start_xmit) (struct sk_buff *skb, | 
 | 		struct net_device *dev); | 
 | 	int  (*hard_header) (struct sk_buff *skb, | 
 | 		struct net_device *dev, | 
 | 		unsigned short type, | 
 | 		void *daddr, | 
 | 		void *saddr, | 
 | 		unsigned len); | 
 | 	int  (*rebuild_header)(struct sk_buff *skb); | 
 | 	int (*hard_header_cache)(struct neighbour *neigh, struct hh_cache *hh); | 
 | 	void (*header_cache_update)(struct hh_cache *hh, struct net_device *dev, unsigned char *  haddr); | 
 | 	struct net_device_stats* (*get_stats)(struct net_device *dev); | 
 | 	struct timer_list timer; | 
 | }; | 
 |  | 
 | #endif | 
 |  | 
 | #define SHAPER_SET_DEV		0x0001 | 
 | #define SHAPER_SET_SPEED	0x0002 | 
 | #define SHAPER_GET_DEV		0x0003 | 
 | #define SHAPER_GET_SPEED	0x0004 | 
 |  | 
 | struct shaperconf | 
 | { | 
 | 	__u16	ss_cmd; | 
 | 	union | 
 | 	{ | 
 | 		char 	ssu_name[14]; | 
 | 		__u32	ssu_speed; | 
 | 	} ss_u; | 
 | #define ss_speed ss_u.ssu_speed | 
 | #define ss_name ss_u.ssu_name | 
 | }; | 
 |  | 
 | #endif |