summaryrefslogtreecommitdiff
path: root/cesar/tools/sniffer_phy
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/tools/sniffer_phy')
-rw-r--r--cesar/tools/sniffer_phy/inc/lowlevel.h10
-rw-r--r--cesar/tools/sniffer_phy/src/lowlevel.c13
-rw-r--r--cesar/tools/sniffer_phy/src/mme.c4
-rw-r--r--cesar/tools/sniffer_phy/src/test_mme.c35
4 files changed, 51 insertions, 11 deletions
diff --git a/cesar/tools/sniffer_phy/inc/lowlevel.h b/cesar/tools/sniffer_phy/inc/lowlevel.h
index b21b2d30f2..7776dc3ea0 100644
--- a/cesar/tools/sniffer_phy/inc/lowlevel.h
+++ b/cesar/tools/sniffer_phy/inc/lowlevel.h
@@ -65,6 +65,8 @@ struct lowlevel_t
{
/* Phy context. */
phy_t *phy;
+ /** Receive payload. */
+ bool rx_pb;
/** Block pool head. */
blk_t *pool_head;
/** Block pool tail. */
@@ -101,6 +103,14 @@ lowlevel_init (sniffer_phy_t *ctx);
void
lowlevel_activate (sniffer_phy_t *ctx, bool state);
+/**
+ * Activate payload reception.
+ * \param ctx sniffer context
+ * \param rx_pb payload reception status
+ */
+void
+lowlevel_rx_pb (sniffer_phy_t *ctx, bool rx_pb);
+
END_DECLS
#endif /* inc_lowlevel_h */
diff --git a/cesar/tools/sniffer_phy/src/lowlevel.c b/cesar/tools/sniffer_phy/src/lowlevel.c
index 36383e9d05..4a38e52374 100644
--- a/cesar/tools/sniffer_phy/src/lowlevel.c
+++ b/cesar/tools/sniffer_phy/src/lowlevel.c
@@ -47,8 +47,8 @@ lowlevel_fc_analyse (sniffer_phy_t *ctx, const u32 *fc_av,
MAC_DX417_TCK, MAC_DX567_TCK, MAC_DX3534_TCK };
pbproc_fc_t *fc = (pbproc_fc_t *) fc_av;
mpdu->pb_nb = 0;
- /* CRC OK and enough pool? */
- if (fc_av && ctx->lowlevel.pool_size > 1)
+ /* CRC OK, payload requested and enough pool? */
+ if (fc_av && ctx->lowlevel.rx_pb && ctx->lowlevel.pool_size > 1)
{
/* Decode FC. */
switch (fc->generic.dt_av)
@@ -262,6 +262,7 @@ lowlevel_init (sniffer_phy_t *ctx)
static tonemask_info_t tonemask_info;
dbg_assert (ctx);
/* Initialise context. */
+ ctx->lowlevel.rx_pb = false;
slist_init (ctx->lowlevel.pool_, paste_size);
slist_init (ctx->lowlevel.rx_, paste);
ctx->lowlevel.rxing = NULL;
@@ -299,3 +300,11 @@ lowlevel_activate (sniffer_phy_t *ctx, bool state)
phy_rx_activate (ctx->lowlevel.phy, true, 0, state);
}
+void
+lowlevel_rx_pb (sniffer_phy_t *ctx, bool rx_pb)
+{
+ dbg_assert (ctx);
+ /* Keep setting. */
+ ctx->lowlevel.rx_pb = rx_pb;
+}
+
diff --git a/cesar/tools/sniffer_phy/src/mme.c b/cesar/tools/sniffer_phy/src/mme.c
index 22ecff4569..c90d88bf4a 100644
--- a/cesar/tools/sniffer_phy/src/mme.c
+++ b/cesar/tools/sniffer_phy/src/mme.c
@@ -207,11 +207,13 @@ mme_handle_vs_sniffer_req (sniffer_phy_t *ctx, mme_buffer_t *mme)
result = 0;
bool was_activated = ctx->mme.mac_sniffer != 0;
bool is_activated = command != 0;
+ bool is_rx_pb = (command & MME_SNIFFER_MODE_RX_PB) != 0;
ctx->mme.mac_sniffer = is_activated ? mme->sa : 0;
- ctx->mme.pb = (command & MME_SNIFFER_MODE_RX_PB) != 0;
+ ctx->mme.pb = is_rx_pb;
ctx->mme.status = command;
if (was_activated != is_activated)
lowlevel_activate (ctx, is_activated);
+ lowlevel_rx_pb (ctx, is_rx_pb);
} while (0);
/* Send feedback. */
mme_send_vs_sniffer_cnf (ctx, mme, result);
diff --git a/cesar/tools/sniffer_phy/src/test_mme.c b/cesar/tools/sniffer_phy/src/test_mme.c
index a51c8c5083..f1cb0bdda5 100644
--- a/cesar/tools/sniffer_phy/src/test_mme.c
+++ b/cesar/tools/sniffer_phy/src/test_mme.c
@@ -84,6 +84,12 @@ static bool rx_activate_expect;
/* Expected activation status. */
static bool rx_activate_state_expect;
+/* Expect payload receiving status set, reset when done. */
+static bool rx_pb_expect;
+
+/* Expected payload receiving status. */
+static bool rx_pb_state_expect;
+
void
lowlevel_activate (sniffer_phy_t *ctx, bool state)
{
@@ -93,6 +99,15 @@ lowlevel_activate (sniffer_phy_t *ctx, bool state)
rx_activate_expect = false;
}
+void
+lowlevel_rx_pb (sniffer_phy_t *ctx, bool rx_pb)
+{
+ dbg_assert (ctx);
+ dbg_assert (rx_pb_expect);
+ dbg_assert (rx_pb == rx_pb_state_expect);
+ rx_pb_expect = false;
+}
+
/* Test unhandled frames reception. */
static void
mme_unhandled_test_case (test_t t, sniffer_phy_t *ctx)
@@ -282,6 +297,7 @@ mme_sniffer_test (test_t t, sniffer_phy_t *ctx, const char *test_name,
mac_t s_sa, u8 s_command,
u8 r_result, u8 r_status, mac_t r_da,
bool rx_activate, bool rx_activate_state,
+ bool rx_pb, bool rx_pb_state,
mac_t sniffer_before, mac_t sniffer_after,
bool pb_before, bool pb_after)
{
@@ -322,10 +338,13 @@ mme_sniffer_test (test_t t, sniffer_phy_t *ctx, const char *test_name,
send_unexpected = false;
rx_activate_expect = rx_activate;
rx_activate_state_expect = rx_activate_state;
+ rx_pb_expect = rx_pb;
+ rx_pb_state_expect = rx_pb_state;
mme_handle (ctx, (u8 *) buffer, length);
test_fail_unless (!send_expect.buffer);
test_fail_if (send_unexpected);
test_fail_unless (!rx_activate_expect);
+ test_fail_unless (!rx_pb_expect);
test_fail_unless (ctx->mme.mac_sniffer == sniffer_after);
test_fail_unless (ctx->mme.pb == pb_after);
} test_end;
@@ -340,49 +359,49 @@ mme_sniffer_test_case (test_t t, sniffer_phy_t *ctx)
mme_sniffer_test (t, ctx, "req subscribe ok",
TEST_MME_MAC_PEER, 0x20,
0x00, 0x20, TEST_MME_MAC_PEER,
- true, true,
+ true, true, true, false,
0, TEST_MME_MAC_PEER,
false, false);
mme_sniffer_test (t, ctx, "req subscribe again ok",
TEST_MME_MAC_PEER, 0x20,
0x00, 0x20, TEST_MME_MAC_PEER,
- false, false,
+ false, false, true, false,
TEST_MME_MAC_PEER, TEST_MME_MAC_PEER,
false, false);
mme_sniffer_test (t, ctx, "req subscribe change ok",
TEST_MME_MAC_PEER, 0xa0,
0x00, 0xa0, TEST_MME_MAC_PEER,
- false, false,
+ false, false, true, true,
TEST_MME_MAC_PEER, TEST_MME_MAC_PEER,
false, true);
mme_sniffer_test (t, ctx, "req subscribe another nok",
TEST_MME_MAC_OTHER, 0x20,
0x01, 0xa0, TEST_MME_MAC_PEER,
- false, false,
+ false, false, false, false,
TEST_MME_MAC_PEER, TEST_MME_MAC_PEER,
true, true);
mme_sniffer_test (t, ctx, "req unsubscribe another nok",
TEST_MME_MAC_OTHER, 0x00,
0x01, 0xa0, TEST_MME_MAC_PEER,
- false, false,
+ false, false, false, false,
TEST_MME_MAC_PEER, TEST_MME_MAC_PEER,
true, true);
mme_sniffer_test (t, ctx, "req unsubscribe ok",
TEST_MME_MAC_PEER, 0x00,
0x00, 0x00, 0,
- true, false,
+ true, false, true, false,
TEST_MME_MAC_PEER, 0,
true, false);
mme_sniffer_test (t, ctx, "req bad command",
TEST_MME_MAC_PEER, 0x10,
0x01, 0x00, 0,
- false, false,
+ false, false, false, false,
0, 0,
false, false);
mme_sniffer_test (t, ctx, "req bad mme",
TEST_MME_MAC_PEER, 0xff,
0x01, 0x00, 0,
- false, false,
+ false, false, false, false,
0, 0,
false, false);
}