diff mbox

[2/2] ath5k: capture CCK and OFDM restarts

Message ID 539B85F0.3090004@gmail.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Mathy Vanhoef June 13, 2014, 11:14 p.m. UTC
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" <vanhoefm@gmail.com>
>>
>> Treat frames that underwent a CCK or OFDM restart as frames with an invalid CRC.
>>
>> Signed-off-by: Mathy Vanhoef <vanhoefm@gmail.com>
>> ---
>>  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" <vanhoefm@gmail.com>

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

Signed-off-by: Mathy Vanhoef <vanhoefm@gmail.com>
---
 drivers/net/wireless/ath/ath5k/base.c |   15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

Comments

Gus Wirth June 14, 2014, 12:27 a.m. UTC | #1
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
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mathy Vanhoef June 23, 2014, 9:20 p.m. UTC | #2
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 <gwirth79@gmail.com> 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
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
John W. Linville June 25, 2014, 7:09 p.m. UTC | #3
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...
diff mbox

Patch

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) {
 			/*