mac80211: support reporting 0-length PSDU in radiotap
For certain sounding frames, it may be useful to report them to userspace even though they don't have a PSDU in order to determine the PHY parameters (e.g. VHT rate/stream config.) Add support for this to mac80211. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Shaul Triebitz <shaul.triebitz@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committed by
Johannes Berg

parent
62872a9b9a
commit
c3d1f87528
@@ -115,7 +115,8 @@ static inline bool should_drop_frame(struct sk_buff *skb, int present_fcs_len,
|
||||
|
||||
if (status->flag & (RX_FLAG_FAILED_FCS_CRC |
|
||||
RX_FLAG_FAILED_PLCP_CRC |
|
||||
RX_FLAG_ONLY_MONITOR))
|
||||
RX_FLAG_ONLY_MONITOR |
|
||||
RX_FLAG_NO_PSDU))
|
||||
return true;
|
||||
|
||||
if (unlikely(skb->len < 16 + present_fcs_len + rtap_space))
|
||||
@@ -189,6 +190,9 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
|
||||
BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he_mu) != 12);
|
||||
}
|
||||
|
||||
if (status->flag & RX_FLAG_NO_PSDU)
|
||||
len += 1;
|
||||
|
||||
if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
|
||||
len = ALIGN(len, 2);
|
||||
len += 4;
|
||||
@@ -642,6 +646,12 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||
pos += sizeof(he_mu);
|
||||
}
|
||||
|
||||
if (status->flag & RX_FLAG_NO_PSDU) {
|
||||
rthdr->it_present |=
|
||||
cpu_to_le32(1 << IEEE80211_RADIOTAP_ZERO_LEN_PSDU);
|
||||
*pos++ = status->zero_length_psdu_type;
|
||||
}
|
||||
|
||||
if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
|
||||
/* ensure 2 byte alignment */
|
||||
while ((pos - (u8 *)rthdr) & 1)
|
||||
|
Reference in New Issue
Block a user