summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
Diffstat (limited to 'cesar')
-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