]> Pileus Git - ~andy/linux/commitdiff
netem: markov loss model transition fix
authorHagen Paul Pfeifer <hagen@jauu.net>
Tue, 22 Oct 2013 21:27:06 +0000 (23:27 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Oct 2013 23:03:39 +0000 (19:03 -0400)
The transition from markov state "3 => lost packets within a burst
period" to "1 => successfully transmitted packets within a gap period"
has no *additional* loss event. The loss already happen for transition
from 1 -> 3, this additional loss will make things go wild.

E.g. transition probabilities:

p13:   10%
p31:  100%

Expected:

Ploss = p13 / (p13 + p31)
Ploss = ~9.09%

... but it isn't. Even worse: we get a double loss - each time.
So simple don't return true to indicate loss, rather break and return
false.

Signed-off-by: Hagen Paul Pfeifer <hagen@jauu.net>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Stefano Salsano <stefano.salsano@uniroma2.it>
Cc: Fabio Ludovici <fabio.ludovici@yahoo.it>
Signed-off-by: Hagen Paul Pfeifer <hagen@jauu.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_netem.c

index b87e83d0747821bc2251c3b099f91a3358c211d9..75c94e59a3bd3889cd87460afe87ac611eeb024e 100644 (file)
@@ -235,7 +235,6 @@ static bool loss_4state(struct netem_sched_data *q)
                        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;