summaryrefslogtreecommitdiff
path: root/net-wireless/compat-wireless/files/4000_mac80211_2.6.28-rc4-wl_frag+ack_v3.patch
diff options
context:
space:
mode:
Diffstat (limited to 'net-wireless/compat-wireless/files/4000_mac80211_2.6.28-rc4-wl_frag+ack_v3.patch')
-rw-r--r--net-wireless/compat-wireless/files/4000_mac80211_2.6.28-rc4-wl_frag+ack_v3.patch27
1 files changed, 27 insertions, 0 deletions
diff --git a/net-wireless/compat-wireless/files/4000_mac80211_2.6.28-rc4-wl_frag+ack_v3.patch b/net-wireless/compat-wireless/files/4000_mac80211_2.6.28-rc4-wl_frag+ack_v3.patch
new file mode 100644
index 00000000..58bf3323
--- /dev/null
+++ b/net-wireless/compat-wireless/files/4000_mac80211_2.6.28-rc4-wl_frag+ack_v3.patch
@@ -0,0 +1,27 @@
+diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
+index 0855cac..221bed6 100644
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -611,11 +611,19 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
+
+ /*
+ * Packet injection may want to control the sequence
+- * number, if we have no matching interface then we
+- * neither assign one ourselves nor ask the driver to.
++ * number, so if an injected packet is found, skip
++ * renumbering it. Also make the packet NO_ACK to avoid
++ * excessive retries (ACKing and retrying should be
++ * handled by the injecting application).
++ * FIXME This may break hostapd and some other injectors.
++ * This should be done using a radiotap flag.
+ */
+- if (unlikely(!info->control.vif))
++ if (unlikely((info->flags & IEEE80211_TX_CTL_INJECTED) &&
++ !(tx->sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES))) {
++ if (!ieee80211_has_morefrags(hdr->frame_control))
++ info->flags |= IEEE80211_TX_CTL_NO_ACK;
+ return TX_CONTINUE;
++ }
+
+ if (unlikely(ieee80211_is_ctl(hdr->frame_control)))
+ return TX_CONTINUE;