mt76: fix wrong HE data rate in sniffer tool
authorDeren Wu <deren.wu@mediatek.com>
Tue, 15 Mar 2022 16:24:34 +0000 (00:24 +0800)
committerFelix Fietkau <nbd@nbd.name>
Wed, 16 Mar 2022 20:15:10 +0000 (21:15 +0100)
Due to the missing IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN in
status report, the HE rate in wirehsark/tcpdump always shows wrong value.
Applications will refer to IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC
when the flag is set and shows the correct data rate.

Reviewed-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Deren Wu <deren.wu@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/mac.c
drivers/net/wireless/mediatek/mt76/mt7921/mac.c

index 47d5a993c9c7f28746d2992f2d35fb3ff23cb48d..e9e7efbf350d5ef7d8f4dc92f99d6a9ad9239838 100644 (file)
@@ -349,14 +349,16 @@ mt7915_mac_decode_he_radiotap(struct sk_buff *skb, __le32 *rxv, u32 mode)
        case MT_PHY_TYPE_HE_SU:
                he->data1 |= HE_BITS(DATA1_FORMAT_SU) |
                             HE_BITS(DATA1_UL_DL_KNOWN) |
-                            HE_BITS(DATA1_BEAM_CHANGE_KNOWN);
+                            HE_BITS(DATA1_BEAM_CHANGE_KNOWN) |
+                            HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
 
                he->data3 |= HE_PREP(DATA3_BEAM_CHANGE, BEAM_CHNG, rxv[14]) |
                             HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
                break;
        case MT_PHY_TYPE_HE_EXT_SU:
                he->data1 |= HE_BITS(DATA1_FORMAT_EXT_SU) |
-                            HE_BITS(DATA1_UL_DL_KNOWN);
+                            HE_BITS(DATA1_UL_DL_KNOWN) |
+                            HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
 
                he->data3 |= HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
                break;
index 263ac62d88b7ddc3bb43849b37b0698567232ce6..233998ca48573a6f1f8b024ba55740ef8baabd07 100644 (file)
@@ -304,14 +304,16 @@ mt7921_mac_decode_he_radiotap(struct sk_buff *skb, __le32 *rxv, u32 mode)
        case MT_PHY_TYPE_HE_SU:
                he->data1 |= HE_BITS(DATA1_FORMAT_SU) |
                             HE_BITS(DATA1_UL_DL_KNOWN) |
-                            HE_BITS(DATA1_BEAM_CHANGE_KNOWN);
+                            HE_BITS(DATA1_BEAM_CHANGE_KNOWN) |
+                            HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
 
                he->data3 |= HE_PREP(DATA3_BEAM_CHANGE, BEAM_CHNG, rxv[14]) |
                             HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
                break;
        case MT_PHY_TYPE_HE_EXT_SU:
                he->data1 |= HE_BITS(DATA1_FORMAT_EXT_SU) |
-                            HE_BITS(DATA1_UL_DL_KNOWN);
+                            HE_BITS(DATA1_UL_DL_KNOWN) |
+                            HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
 
                he->data3 |= HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
                break;