summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorschodet2010-05-17 11:30:40 +0000
committerschodet2010-05-17 11:30:40 +0000
commitb4eb144a36d06406a2056f31d847e41b85d6c038 (patch)
treec77344b1b380a6ea6e82fcc80a08c08a64653c5b /cesar
parent8b9780ceb0d77c19ad711c53d79c715bcdc3bf34 (diff)
cesar/mac/pbproc: handle beacon preparation during extraction, closes #1549
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@7105 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar')
-rw-r--r--cesar/mac/pbproc/src/prep_mpdu.c2
-rw-r--r--cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c18
2 files changed, 14 insertions, 6 deletions
diff --git a/cesar/mac/pbproc/src/prep_mpdu.c b/cesar/mac/pbproc/src/prep_mpdu.c
index 0f88023514..3f09571d10 100644
--- a/cesar/mac/pbproc/src/prep_mpdu.c
+++ b/cesar/mac/pbproc/src/prep_mpdu.c
@@ -92,7 +92,7 @@ pbproc_prep_beacon (pbproc_t *ctx)
if (mfs->ca_state == CA_MFS_STATE_REMOVED)
return;
/* Is there a prepared beacon? */
- if (!mfs->seg_nb)
+ if (mfs->seg_nb <= 0)
return;
/* Fill easy fields. */
prep->stei = 0;
diff --git a/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c b/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c
index 0c1c615f73..38cc57cfe2 100644
--- a/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c
+++ b/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c
@@ -720,7 +720,7 @@ prep_mpdu_ack_test_case (test_t t)
void
prep_beacon_test (test_t t, test_pbproc_t *tp, u32 date, bool prepared,
- uint duration_symb_nb, uint symb_nb)
+ bool preparing, uint duration_symb_nb, uint symb_nb)
{
test_within (t);
dbg_assert (tp);
@@ -741,6 +741,10 @@ prep_beacon_test (test_t t, test_pbproc_t *tp, u32 date, bool prepared,
params.bpsto = pb->data + 123;
pbproc_mfs_beacon_prepare (tp->pbproc, mfs, pb, &params);
}
+ else if (preparing)
+ {
+ mfs->seg_nb = -1;
+ }
/* Setup an access. */
test_pbproc_alloc (tp, true, beacon_period_start_date);
ca_access_param_t *access = &tp->pbproc->access;
@@ -837,7 +841,7 @@ prep_beacon_test (test_t t, test_pbproc_t *tp, u32 date, bool prepared,
}
else
{
- test_fail_unless (mfs->seg_nb == 0);
+ test_fail_unless (mfs->seg_nb == (preparing ? -1 : 0));
test_fail_unless (mfs->head == NULL);
}
}
@@ -853,15 +857,19 @@ prep_mpdu_beacon_test_case (test_t t)
test_pbproc_init (&tp);
test_begin (t, "valid")
{
- prep_beacon_test (t, &tp, 123456, true, 6, 6);
+ prep_beacon_test (t, &tp, 123456, true, false, 6, 6);
} test_end;
test_begin (t, "unvalid")
{
- prep_beacon_test (t, &tp, 54321, true, 5, 0);
+ prep_beacon_test (t, &tp, 54321, true, false, 5, 0);
} test_end;
test_begin (t, "no seg")
{
- prep_beacon_test (t, &tp, 54321, false, 6, 0);
+ prep_beacon_test (t, &tp, 54321, false, false, 6, 0);
+ } test_end;
+ test_begin (t, "during preparation")
+ {
+ prep_beacon_test (t, &tp, 54321, false, true, 6, 0);
} test_end;
test_pbproc_uninit (&tp);
}