Skip to content

Commit

Permalink
dccp ccid-3: TFRC reverse-lookup Bug-Fix
Browse files Browse the repository at this point in the history
This fixes a bug in the reverse lookup of p: given a value f(p), instead of p,
the function returned the smallest tabulated value f(p).

The smallest tabulated value of
	 
   10^6 * f(p) =  sqrt(2*p/3) + 12 * sqrt(3*p/8) * (32 * p^3 + p) 

for p=0.0001 is 8172. 

Since this value is scaled by 10^6, the outcome of this bug is that a loss
of 8172/10^6 = 0.8172% was reported whenever the input was below the table
resolution of 0.01%.

This means that the value was over 80 times too high, resulting in large spikes
of the initial loss interval, thus unnecessarily reducing the throughput.

Also corrected the printk format (%u for u32).

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
  • Loading branch information
Gerrit Renker committed Jun 11, 2008
1 parent 65907a4 commit 1e8a287
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions net/dccp/ccids/lib/tfrc_equation.c
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,7 @@ u32 tfrc_calc_x(u16 s, u32 R, u32 p)

EXPORT_SYMBOL_GPL(tfrc_calc_x);

/*
/**
* tfrc_calc_x_reverse_lookup - try to find p given f(p)
*
* @fvalue: function value to match, scaled by 1000000
Expand All @@ -676,11 +676,11 @@ u32 tfrc_calc_x_reverse_lookup(u32 fvalue)

/* Error cases. */
if (fvalue < tfrc_calc_x_lookup[0][1]) {
DCCP_WARN("fvalue %d smaller than resolution\n", fvalue);
return tfrc_calc_x_lookup[0][1];
DCCP_WARN("fvalue %u smaller than resolution\n", fvalue);
return TFRC_SMALLEST_P;
}
if (fvalue > tfrc_calc_x_lookup[TFRC_CALC_X_ARRSIZE - 1][0]) {
DCCP_WARN("fvalue %d exceeds bounds!\n", fvalue);
DCCP_WARN("fvalue %u exceeds bounds!\n", fvalue);
return 1000000;
}

Expand Down

0 comments on commit 1e8a287

Please sign in to comment.