All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: David Miller <davem@davemloft.net>, stefano.salsano@uniroma2.it
Cc: netdev@vger.kernel.org
Subject: [PATCH net] netem: fix loss generators
Date: Thu, 21 Nov 2013 17:54:19 -0800	[thread overview]
Message-ID: <20131121175419.59059598@nehalam.linuxnetplumber.net> (raw)

Patch from developers of the alternative loss models, downloaded from:
   http://netgroup.uniroma2.it/twiki/bin/view.cgi/Main/NetemCLG

We found some bugs in our first implementation.
A first set of bugs is in the function loss_4state:
   In the case 1 of the switch statement in the if conditions we
    need to add clg->a4 to clg->a1, according to the model.
   In the case 3 of the switch statement we need to delete "return
    true" if the condition leads us in the state 1, because the state 1 is
    a good state.

A second set of bugs is in the function loss_gilb_ell
  In both cases of the switch statement we need to add the break
    statement, because the two cases are mutually exclusive.
  In the case 2, of the switch we change the direction of the inequality to
    net_random()>clg->a3, because clg->a3 is h in the GE model and when h
    is 0 all packets will be lost.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>

--- a/net/sched/sch_netem.c	2013-11-21 17:22:03.655649667 -0800
+++ b/net/sched/sch_netem.c	2013-11-21 17:24:46.438773795 -0800
@@ -215,10 +215,10 @@ static bool loss_4state(struct netem_sch
 		if (rnd < clg->a4) {
 			clg->state = 4;
 			return true;
-		} else if (clg->a4 < rnd && rnd < clg->a1) {
+		} else if (clg->a4 < rnd && rnd < clg->a1 + clg->a4) {
 			clg->state = 3;
 			return true;
-		} else if (clg->a1 < rnd)
+		} else if (clg->a1 + clg->a4 < rnd)
 			clg->state = 1;
 
 		break;
@@ -235,6 +235,7 @@ static bool loss_4state(struct netem_sch
 			clg->state = 2;
 		else if (clg->a3 < rnd && rnd < clg->a2 + clg->a3) {
 			clg->state = 1;
+			return true;
 		} else if (clg->a2 + clg->a3 < rnd) {
 			clg->state = 3;
 			return true;
@@ -268,11 +269,13 @@ static bool loss_gilb_ell(struct netem_s
 			clg->state = 2;
 		if (net_random() < clg->a4)
 			return true;
+		break;
 	case 2:
 		if (net_random() < clg->a2)
 			clg->state = 1;
-		if (clg->a3 > net_random())
+		if (net_random() > clg->a3)
 			return true;
+		break;
 	}
 
 	return false;

             reply	other threads:[~2013-11-22 18:32 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-22  1:54 Stephen Hemminger [this message]
2013-11-27 21:28 ` [PATCH net] netem: fix loss generators Hagen Paul Pfeifer
2013-11-28 23:18 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131121175419.59059598@nehalam.linuxnetplumber.net \
    --to=stephen@networkplumber.org \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    --cc=stefano.salsano@uniroma2.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.