2014-06-13 21:41:49

by Mathy Vanhoef

[permalink] [raw]
Subject: [PATCH 2/2] ath5k: capture CCK and OFDM restarts

Hi all,

This patch allows users to see CCK and OFDM restarts when FIF_FCSFAIL is set.
Without this patch only the stronger frame (causing the restart) would be
visible.

The patch has been tested using our reactive jammer. The prefix of the weaker
frame is being correctly passed on as a frame with bad CRC!
--
From: "Mathy Vanhoef" <[email protected]>

Treat frames that underwent a CCK or OFDM restart as frames with an invalid CRC.

Signed-off-by: Mathy Vanhoef <[email protected]>
---
drivers/net/wireless/ath/ath5k/base.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 39ba642..1bbc850 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -1462,7 +1462,19 @@ ath5k_receive_frame_ok(struct ath5k_hw *ah, struct ath5k_rx_status *rs)
ah->stats.rxerr_phy++;
if (rs->rs_phyerr > 0 && rs->rs_phyerr < 32)
ah->stats.rxerr_phy_code[rs->rs_phyerr]++;
- return false;
+
+ /*
+ * Threat packets that underwent a CCK of OFDM reset as having a bad CRC.
+ * These restarts happen when the radio resynchronizes to a stronger frame
+ * while receiving a weaker frame. Here we receive the prefix of the weak
+ * frame. Since these are incomplete packets, mark their CRC as invalid.
+ */
+ if (rs->rs_phyerr == AR5K_RX_PHY_ERROR_OFDM_RESTART ||
+ rs->rs_phyerr == AR5K_RX_PHY_ERROR_CCK_RESTART) {
+ rs->rs_status |= AR5K_RXERR_CRC;
+ rs->rs_status &= (~AR5K_RXERR_PHY);
+ }
}
if (rs->rs_status & AR5K_RXERR_DECRYPT) {
/*
--
1.8.1.2



2014-06-23 21:21:16

by Mathy Vanhoef

[permalink] [raw]
Subject: Re: [ath5k-devel] [PATCH 2/2] ath5k: capture CCK and OFDM restarts

I'm sure the spelling error can be fixed when applying the patch.

This (and the previous patch) is useful for people using monitor mode
to diagnose network problems, monitor traffic, research things, etc.
So it would be nice to have it included!

On Sat, Jun 14, 2014 at 2:27 AM, Gus Wirth <[email protected]> wrote:
> On 2014-06-13 16:14, Mathy Vanhoef wrote:
> [snip]
>> Just saw a spelling mistake in the comment, s/Threat/Treat.
>
> One more mistake in the comment.
>
> Change the word "of" to "or":
>
>
> ...underwent a CCK of OFDM reset...
>
> should be
>
> ...underwent a CCK or OFDM reset...
>
> Gus

2014-06-13 22:08:07

by Felix Fietkau

[permalink] [raw]
Subject: Re: [PATCH 2/2] ath5k: capture CCK and OFDM restarts

On 2014-06-13 23:41, Mathy Vanhoef wrote:
> Hi all,
>
> This patch allows users to see CCK and OFDM restarts when FIF_FCSFAIL is set.
> Without this patch only the stronger frame (causing the restart) would be
> visible.
>
> The patch has been tested using our reactive jammer. The prefix of the weaker
> frame is being correctly passed on as a frame with bad CRC!
> --
> From: "Mathy Vanhoef" <[email protected]>
>
> Treat frames that underwent a CCK or OFDM restart as frames with an invalid CRC.
>
> Signed-off-by: Mathy Vanhoef <[email protected]>
> ---
> drivers/net/wireless/ath/ath5k/base.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
> index 39ba642..1bbc850 100644
> --- a/drivers/net/wireless/ath/ath5k/base.c
> +++ b/drivers/net/wireless/ath/ath5k/base.c
> @@ -1462,7 +1462,19 @@ ath5k_receive_frame_ok(struct ath5k_hw *ah, struct ath5k_rx_status *rs)
> ah->stats.rxerr_phy++;
> if (rs->rs_phyerr > 0 && rs->rs_phyerr < 32)
> ah->stats.rxerr_phy_code[rs->rs_phyerr]++;
> - return false;
> +
> + /*
> + * Threat packets that underwent a CCK of OFDM reset as having a bad CRC.
> + * These restarts happen when the radio resynchronizes to a stronger frame
> + * while receiving a weaker frame. Here we receive the prefix of the weak
> + * frame. Since these are incomplete packets, mark their CRC as invalid.
> + */
> + if (rs->rs_phyerr == AR5K_RX_PHY_ERROR_OFDM_RESTART ||
> + rs->rs_phyerr == AR5K_RX_PHY_ERROR_CCK_RESTART) {
> + rs->rs_status |= AR5K_RXERR_CRC;
> + rs->rs_status &= (~AR5K_RXERR_PHY);
Unnecessary braces

> + }
What about the return statement you removed, shouldn't you add that back
for the 'else' case?

- Felix

2014-06-25 19:15:19

by John W. Linville

[permalink] [raw]
Subject: Re: [ath5k-devel] [PATCH 2/2] ath5k: capture CCK and OFDM restarts

On Mon, Jun 23, 2014 at 11:20:54PM +0200, Mathy Vanhoef wrote:
> I'm sure the spelling error can be fixed when applying the patch.
>
> This (and the previous patch) is useful for people using monitor mode
> to diagnose network problems, monitor traffic, research things, etc.
> So it would be nice to have it included!

It would also be nice if you could repost it properly, instead
of expecting me to dig through email threads to piece together a
mergeable patch...

--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.

2014-06-14 00:27:37

by Gus Wirth

[permalink] [raw]
Subject: Re: [ath5k-devel] [PATCH 2/2] ath5k: capture CCK and OFDM restarts

On 2014-06-13 16:14, Mathy Vanhoef wrote:
[snip]
> Just saw a spelling mistake in the comment, s/Threat/Treat.

One more mistake in the comment.

Change the word "of" to "or":


...underwent a CCK of OFDM reset...

should be

...underwent a CCK or OFDM reset...

Gus

2014-06-13 23:15:00

by Mathy Vanhoef

[permalink] [raw]
Subject: Re: [PATCH 2/2] ath5k: capture CCK and OFDM restarts

On 14/06/2014 0:07, Felix Fietkau wrote:
> On 2014-06-13 23:41, Mathy Vanhoef wrote:
>> Hi all,
>>
>> This patch allows users to see CCK and OFDM restarts when FIF_FCSFAIL is set.
>> Without this patch only the stronger frame (causing the restart) would be
>> visible.
>>
>> The patch has been tested using our reactive jammer. The prefix of the weaker
>> frame is being correctly passed on as a frame with bad CRC!
>> --
>> From: "Mathy Vanhoef" <[email protected]>
>>
>> Treat frames that underwent a CCK or OFDM restart as frames with an invalid CRC.
>>
>> Signed-off-by: Mathy Vanhoef <[email protected]>
>> ---
>> drivers/net/wireless/ath/ath5k/base.c | 14 +++++++++++++-
>> 1 file changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
>> index 39ba642..1bbc850 100644
>> --- a/drivers/net/wireless/ath/ath5k/base.c
>> +++ b/drivers/net/wireless/ath/ath5k/base.c
>> @@ -1462,7 +1462,19 @@ ath5k_receive_frame_ok(struct ath5k_hw *ah, struct ath5k_rx_status *rs)
>> ah->stats.rxerr_phy++;
>> if (rs->rs_phyerr > 0 && rs->rs_phyerr < 32)
>> ah->stats.rxerr_phy_code[rs->rs_phyerr]++;
>> - return false;
>> +
>> + /*
>> + * Threat packets that underwent a CCK of OFDM reset as having a bad CRC.
>> + * These restarts happen when the radio resynchronizes to a stronger frame
>> + * while receiving a weaker frame. Here we receive the prefix of the weak
>> + * frame. Since these are incomplete packets, mark their CRC as invalid.
>> + */
>> + if (rs->rs_phyerr == AR5K_RX_PHY_ERROR_OFDM_RESTART ||
>> + rs->rs_phyerr == AR5K_RX_PHY_ERROR_CCK_RESTART) {
>> + rs->rs_status |= AR5K_RXERR_CRC;
>> + rs->rs_status &= (~AR5K_RXERR_PHY);
> Unnecessary braces
>
>> + }
> What about the return statement you removed, shouldn't you add that back
> for the 'else' case?
>
> - Felix
>

Just saw a spelling mistake in the comment, s/Threat/Treat.

The parenthesis around `(~AR5K_RXERR_PHY)` can indeed be removed. I suppose it's best to keep the return statement (I don't know precisely why it appears so early in the function, but it likely has a good reason). Updated patch is included below.
--
From: "Mathy Vanhoef" <[email protected]>

Treat frames that underwent a CCK or OFDM restart as frames with an invalid CRC.

Signed-off-by: Mathy Vanhoef <[email protected]>
---
drivers/net/wireless/ath/ath5k/base.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 4b18434..6e7c636 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -1457,7 +1457,20 @@ ath5k_receive_frame_ok(struct ath5k_hw *ah, struct ath5k_rx_status *rs)
ah->stats.rxerr_phy++;
if (rs->rs_phyerr > 0 && rs->rs_phyerr < 32)
ah->stats.rxerr_phy_code[rs->rs_phyerr]++;
- return false;
+
+ /*
+ * Treat packets that underwent a CCK of OFDM reset as having a bad CRC.
+ * These restarts happen when the radio resynchronizes to a stronger frame
+ * while receiving a weaker frame. Here we receive the prefix of the weak
+ * frame. Since these are incomplete packets, mark their CRC as invalid.
+ */
+ if (rs->rs_phyerr == AR5K_RX_PHY_ERROR_OFDM_RESTART ||
+ rs->rs_phyerr == AR5K_RX_PHY_ERROR_CCK_RESTART) {
+ rs->rs_status |= AR5K_RXERR_CRC;
+ rs->rs_status &= ~AR5K_RXERR_PHY;
+ } else {
+ return false;
+ }
}
if (rs->rs_status & AR5K_RXERR_DECRYPT) {
/*
--
1.8.1.2