Stephen Hemminger
2004-Jun-17 22:56 UTC
[PATCH] (4/4) add loss option to network delay scheduler
This enhances the network simulation scheduler to do simple random loss. The loss parameter is a simple 32 bit value such that 0 means no loss, and 0xffffffff is always drop. I have a new version of the tc command which takes care of conversion from percent to this value. Same patch for 2.4 and 2.6 Signed-off-by: Stephen Hemminger <shemminger@osdl.org> diff -Nru a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h --- a/include/linux/pkt_sched.h 2004-06-17 15:26:51 -07:00 +++ b/include/linux/pkt_sched.h 2004-06-17 15:26:51 -07:00 @@ -437,5 +437,6 @@ { __u32 latency; __u32 limit; -}; + __u32 loss; +}; #endif diff -Nru a/net/sched/sch_delay.c b/net/sched/sch_delay.c --- a/net/sched/sch_delay.c 2004-06-17 15:26:51 -07:00 +++ b/net/sched/sch_delay.c 2004-06-17 15:26:51 -07:00 @@ -40,6 +40,7 @@ struct dly_sched_data { u32 latency; u32 limit; + u32 loss; struct timer_list timer; struct Qdisc *qdisc; }; @@ -58,6 +59,12 @@ struct dly_skb_cb *cb = (struct dly_skb_cb *)skb->cb; int ret; + /* Random packet drop 0 => none, ~0 => all */ + if (q->loss >= net_random()) { + sch->stats.drops++; + return 0; /* lie about loss so TCP doesn''t know */ + } + PSCHED_GET_TIME(cb->queuetime); /* Queue to underlying scheduler */ @@ -196,6 +203,7 @@ } else { q->latency = qopt->latency; q->limit = qopt->limit; + q->loss = qopt->loss; } return err; } @@ -232,6 +240,7 @@ qopt.latency = q->latency; qopt.limit = q->limit; + qopt.loss = q->loss; RTA_PUT(skb, TCA_OPTIONS, sizeof(qopt), &qopt);
David S. Miller
2004-Jun-18 21:03 UTC
Re: [PATCH] (4/4) add loss option to network delay scheduler
On Thu, 17 Jun 2004 15:56:06 -0700 Stephen Hemminger <shemminger@osdl.org> wrote:> This enhances the network simulation scheduler to do simple random loss. > > The loss parameter is a simple 32 bit value such that 0 means no loss, and > 0xffffffff is always drop. I have a new version of the tc command which takes > care of conversion from percent to this value. > > Same patch for 2.4 and 2.6Applied. But the 2.4.x side I had to apply by hand because in 2.4.x''s copy if pkt_sched.h there is no empty line before the final #endif and thus patch rejected it.