| #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 *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 |