summaryrefslogtreecommitdiff
path: root/cesar/mac/ca
diff options
context:
space:
mode:
authorschodet2010-06-29 15:37:04 +0000
committerschodet2010-06-29 15:37:04 +0000
commit15f7075d7a6c2db5154169889fcd980ce5261133 (patch)
treed8af101774161752f5a4488d80bf833c9f827634 /cesar/mac/ca
parent55176356e01d0a3e814c16728e9a9a18a9f64249 (diff)
cesar/mac/ca: change backoff workaround, refs #1655 & #1276
The previous workaround was modifying backoff probabilities. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@7261 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/mac/ca')
-rw-r--r--cesar/mac/ca/src/backoff.c14
-rw-r--r--cesar/mac/ca/test/ca/Config1
2 files changed, 8 insertions, 7 deletions
diff --git a/cesar/mac/ca/src/backoff.c b/cesar/mac/ca/src/backoff.c
index a59c0e3d0f..0e7f8ecd44 100644
--- a/cesar/mac/ca/src/backoff.c
+++ b/cesar/mac/ca/src/backoff.c
@@ -42,14 +42,16 @@ ca_backoff_new (ca_t *ctx, uint cap)
dbg_claim (cap < 4);
if (ctx->backoff.active)
ca_backoff_cancel (ctx);
- if (ctx->backoff.bpc == 0 || ctx->backoff.bc == 0 || ctx->backoff.dc == 0)
+ if (ctx->backoff.bpc == 0
+ || ctx->backoff.bc == CONFIG_CA_BACKOFF_MINIMUM
+ || ctx->backoff.dc == 0)
{
uint bpcm = MIN (3u, ctx->backoff.bpc);
ctx->backoff.dc = dc_by_pbc[bpcm];
ctx->backoff.cw = cw_by_capmsb_by_pbc[cap >> 1][bpcm];
ctx->backoff.bpc++;
- ctx->backoff.bc = lib_rnd32 (&ctx->backoff.rnd_context)
- & ctx->backoff.cw;
+ ctx->backoff.bc = (lib_rnd32 (&ctx->backoff.rnd_context)
+ & ctx->backoff.cw) + CONFIG_CA_BACKOFF_MINIMUM;
}
else
{
@@ -59,8 +61,8 @@ ca_backoff_new (ca_t *ctx, uint cap)
{
/* Handle CAP change. */
ctx->backoff.cw = cw;
- ctx->backoff.bc = lib_rnd32 (&ctx->backoff.rnd_context)
- & ctx->backoff.cw;
+ ctx->backoff.bc = (lib_rnd32 (&ctx->backoff.rnd_context)
+ & ctx->backoff.cw) + CONFIG_CA_BACKOFF_MINIMUM;
}
else
{
@@ -68,8 +70,6 @@ ca_backoff_new (ca_t *ctx, uint cap)
}
ctx->backoff.dc--;
}
- if ((int) ctx->backoff.bc < CONFIG_CA_BACKOFF_MINIMUM)
- ctx->backoff.bc = CONFIG_CA_BACKOFF_MINIMUM;
ctx->backoff.active = true;
CA_TRACE (BACKOFF_NEW, ctx->backoff.bpc, ctx->backoff.cw, ctx->backoff.bc,
ctx->backoff.dc);
diff --git a/cesar/mac/ca/test/ca/Config b/cesar/mac/ca/test/ca/Config
index 76d5011b2b..de9272a3dd 100644
--- a/cesar/mac/ca/test/ca/Config
+++ b/cesar/mac/ca/test/ca/Config
@@ -1,3 +1,4 @@
CONFIG_DEBUG_FATAL_CATCH = y
CONFIG_TRACE = y
CONFIG_RESTRACK = y
+CONFIG_CA_BACKOFF_MINIMUM = 0