diff -Nru linux/drivers/net/shaper.c linux-new/drivers/net/shaper.c --- linux/drivers/net/shaper.c Sun Jun 20 13:10:09 1999 +++ linux-new/drivers/net/shaper.c Sun Jun 20 13:06:52 1999 @@ -60,6 +60,15 @@ * is a nono if called from irq context. * 1999 Andrea Arcangeli */ + +/* + * 20/06/1999 Added linkdelay to simulate links with latencies, might be + * useful for sadistic ISPs + * To be able to use it, a little patch for shapecfg needs to be applied - + * this can be found on http://www.lr.tudelft.nl/~lr788024/shaper/ + * + * Jasper Spaans, c.j.spaans@lr.tudelft.nl + */ #include #include @@ -136,6 +145,17 @@ shaper->bytespertick++; } +static void shaper_setdelay(struct shaper *shaper, int linkdelay) +{ + +/* We just need to convert the value in ms to kernel ticks, so that's + * what we'll do right here. The rest of this function isn't really + * exotic + */ + + shaper->linkdelay=(linkdelay*HZ/1000); +} + /* * Throw a frame at a shaper. */ @@ -156,11 +176,15 @@ /* * Set up our packet details */ + + if(sh_debug) + printk("Delay: %d\n",shaper->linkdelay); skb->shapelatency=0; skb->shapeclock=shaper->recovery; if(time_before(skb->shapeclock, jiffies)) skb->shapeclock=jiffies; + skb->shapeclock+=shaper->linkdelay; skb->priority=0; /* short term bug fix */ skb->shapestamp=jiffies; @@ -228,8 +252,12 @@ /* * Queue over time. Spill packet. */ - if(skb->shapeclock-jiffies > SHAPER_LATENCY) + if(skb->shapeclock-jiffies > SHAPER_LATENCY+shaper->linkdelay) + { dev_kfree_skb(skb); + if (sh_debug) + printk("Queue over time: %d,%d. Frame dropped\n", skb->shapeclock-jiffies, SHAPER_LATENCY+shaper->linkdelay); + } else skb_queue_tail(&shaper->sendq, skb); } @@ -566,6 +594,12 @@ return 0; case SHAPER_GET_SPEED: ss->ss_speed=sh->bitspersec; + return 0; + case SHAPER_SET_DELAY: + shaper_setdelay(sh,ss->ss_delay); + return 0; + case SHAPER_GET_DELAY: + ss->ss_delay=sh->linkdelay*1000/HZ; return 0; default: return -EINVAL; diff -Nru linux/include/linux/if_shaper.h linux-new/include/linux/if_shaper.h --- linux/include/linux/if_shaper.h Thu Feb 25 01:27:53 1999 +++ linux-new/include/linux/if_shaper.h Sun Jun 20 11:24:32 1999 @@ -23,6 +23,7 @@ __u32 shapeclock; __u32 recovery; /* Time we can next clock a packet out on an empty queue */ + __u16 linkdelay; unsigned long locked; struct device *dev; int (*hard_start_xmit) (struct sk_buff *skb, @@ -47,6 +48,8 @@ #define SHAPER_SET_SPEED 0x0002 #define SHAPER_GET_DEV 0x0003 #define SHAPER_GET_SPEED 0x0004 +#define SHAPER_SET_DELAY 0x0005 +#define SHAPER_GET_DELAY 0x0006 struct shaperconf { @@ -55,9 +58,11 @@ { char ssu_name[14]; __u32 ssu_speed; + __u16 ssu_delay; /* Delay in ms */ } ss_u; #define ss_speed ss_u.ssu_speed #define ss_name ss_u.ssu_name +#define ss_delay ss_u.ssu_delay }; #endif