Honor the 2 new flags in the "TX Flags" Radiotap field, introduced in the previous commit. Signed-off-by: Gábor Stefanik <netrolller.3d@xxxxxxxxx> --- Patch also available as an attachment in case Gmail decides to damage it. diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 155a204..141099a 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -143,6 +143,8 @@ typedef unsigned __bitwise__ ieee80211_tx_result; #define IEEE80211_TX_FRAGMENTED BIT(0) #define IEEE80211_TX_UNICAST BIT(1) #define IEEE80211_TX_PS_BUFFERED BIT(2) +#define IEEE80211_TX_MON_NO_SEQ BIT(3) +#define IEEE80211_TX_MON_NO_ACK BIT(4) struct ieee80211_tx_data { struct sk_buff *skb; diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 0855cac..d08a25e 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -614,14 +614,12 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx) * number, if we have no matching interface then we * neither assign one ourselves nor ask the driver to. */ - if (unlikely(!info->control.vif)) + if (unlikely(!info->control.vif || + tx->flags & IEEE80211_TX_MON_NO_SEQ || + ieee80211_is_ctl(hdr->frame_control)) || + ieee80211_hdrlen(hdr->frame_control) < 24) return TX_CONTINUE; - if (unlikely(ieee80211_is_ctl(hdr->frame_control))) - return TX_CONTINUE; - - if (ieee80211_hdrlen(hdr->frame_control) < 24) - return TX_CONTINUE; /* * Anything but QoS data that has a sequence number field @@ -913,13 +911,17 @@ __ieee80211_parse_tx_radiotap(struct ieee80211_tx_data *tx, if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FRAG) tx->flags |= IEEE80211_TX_FRAGMENTED; break; - + case IEEE80211_RADIOTAP_TX_FLAGS: + if (*iterator.this_arg & IEEE80211_RADIOTAP_F_TX_NOACK) + tx->flags |= IEEE80211_TX_MON_NO_ACK; + if (*iterator.this_arg & IEEE80211_RADIOTAP_F_TX_NOSEQ) + tx->flags |= IEEE80211_TX_MON_NO_SEQ; + break; /* * Please update the file * Documentation/networking/mac80211-injection.txt * when parsing new fields here. */ - default: break; } @@ -1000,6 +1002,9 @@ __ieee80211_tx_prepare(struct ieee80211_tx_data *tx, info->flags &= ~IEEE80211_TX_CTL_NO_ACK; } + if (tx->flags & IEEE80211_TX_MON_NO_ACK) + info->flags |= IEEE80211_TX_CTL_NO_ACK; + if (tx->flags & IEEE80211_TX_FRAGMENTED) { if ((tx->flags & IEEE80211_TX_UNICAST) && skb->len + FCS_LEN > local->fragmentation_threshold &&
Attachment:
0002-mac80211-make-use-of-the-new-no-ack-and-no-seq-renumbering-tx-flags.patch
Description: Binary data