mac80211: support reporting A-MPDU EOF bit value/known
authorJohannes Berg <johannes.berg@intel.com>
Mon, 19 Feb 2018 12:48:39 +0000 (14:48 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 22 Feb 2018 20:13:02 +0000 (21:13 +0100)
Support getting the EOF bit value reported from hardware
and writing it out to radiotap.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/ieee80211_radiotap.h
include/net/mac80211.h
net/mac80211/rx.c

index d91f9e7..960236f 100644 (file)
@@ -149,6 +149,8 @@ enum ieee80211_radiotap_ampdu_flags {
        IEEE80211_RADIOTAP_AMPDU_IS_LAST = 0x0008,
        IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR = 0x0010,
        IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN = 0x0020,
+       IEEE80211_RADIOTAP_AMPDU_EOF = 0x0040,
+       IEEE80211_RADIOTAP_AMPDU_EOF_KNOWN = 0x0080,
 };
 
 /* for IEEE80211_RADIOTAP_VHT */
index 854037b..649f073 100644 (file)
@@ -1099,6 +1099,9 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
  *     the first subframe.
  * @RX_FLAG_ICV_STRIPPED: The ICV is stripped from this frame. CRC checking must
  *     be done in the hardware.
+ * @RX_FLAG_AMPDU_EOF_BIT: Value of the EOF bit in the A-MPDU delimiter for this
+ *     frame
+ * @RX_FLAG_AMPDU_EOF_BIT_KNOWN: The EOF value is known
  */
 enum mac80211_rx_flags {
        RX_FLAG_MMIC_ERROR              = BIT(0),
@@ -1125,6 +1128,8 @@ enum mac80211_rx_flags {
        RX_FLAG_MIC_STRIPPED            = BIT(21),
        RX_FLAG_ALLOW_SAME_PN           = BIT(22),
        RX_FLAG_ICV_STRIPPED            = BIT(23),
+       RX_FLAG_AMPDU_EOF_BIT           = BIT(24),
+       RX_FLAG_AMPDU_EOF_BIT_KNOWN     = BIT(25),
 };
 
 /**
index e755f93..478a9c7 100644 (file)
@@ -439,6 +439,10 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
                        flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR;
                if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)
                        flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN;
+               if (status->flag & RX_FLAG_AMPDU_EOF_BIT_KNOWN)
+                       flags |= IEEE80211_RADIOTAP_AMPDU_EOF_KNOWN;
+               if (status->flag & RX_FLAG_AMPDU_EOF_BIT)
+                       flags |= IEEE80211_RADIOTAP_AMPDU_EOF;
                put_unaligned_le16(flags, pos);
                pos += 2;
                if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)