2011-05-19 23:13:47

by Matteo Croce

[permalink] [raw]
Subject: [PATCH 2/2]: mac80211: report correct MCS information in tx status info

Report correct MCS information in tx status info

Signed-off-by: Matteo Croce <[email protected]>

--- a/net/mac80211/status.c 2011-05-20 00:22:56.220640264 +0200
+++ b/net/mac80211/status.c 2011-05-20 00:24:14.010640270 +0200
@@ -405,6 +405,20 @@
!(info->status.rates[0].flags & IEEE80211_TX_RC_MCS))
rthdr->rate = sband->bitrates[
info->status.rates[0].idx].bitrate / 5;
+ /* HT rates */
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
+ rthdr->hdr.it_present |=
+ cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
+ rthdr->rate = 0;
+ rthdr->ht_known = IEEE80211_RADIOTAP_MCS_HAVE_BW |
+ IEEE80211_RADIOTAP_MCS_HAVE_MCS |
+ IEEE80211_RADIOTAP_MCS_HAVE_GI;
+ rthdr->ht_mcs = info->status.rates[0].idx;
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
+ rthdr->ht_flag |= IEEE80211_RADIOTAP_MCS_BW_40;
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
+ rthdr->ht_flag |= IEEE80211_RADIOTAP_MCS_SGI;
+ }

/* for now report the total retry_count */
rthdr->data_retries = retry_count;


2011-05-20 15:10:51

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 2/2]: mac80211: report correct MCS information in tx status info

On Fri, 2011-05-20 at 01:13 +0200, Matteo Croce wrote:
> Report correct MCS information in tx status info
>
> Signed-off-by: Matteo Croce <[email protected]>
>
> --- a/net/mac80211/status.c 2011-05-20 00:22:56.220640264 +0200
> +++ b/net/mac80211/status.c 2011-05-20 00:24:14.010640270 +0200
> @@ -405,6 +405,20 @@
> !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS))
> rthdr->rate = sband->bitrates[
> info->status.rates[0].idx].bitrate / 5;
> + /* HT rates */
> + if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
> + rthdr->hdr.it_present |=
> + cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);

This means the part that I just commented on from the other patch is
wrong. Think about this again, about how radiotap works etc. You're
creating an invalid radiotap header that's too long if MCS rates aren't
used.

johannes