summaryrefslogtreecommitdiff
path: root/net-wireless/compat-wireless/files/4013-runtime-enable-disable-of-mac80211-packet-injection.patch
blob: 82d9a4c215c2861c2deb63bd2afc03b054b93f39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
--- net/mac80211/tx.c	2009-11-29 14:59:53.474095955 +0100
+++ net/mac80211/tx.c	2009-11-29 15:03:06.436871431 +0100
@@ -670,6 +670,10 @@
 	return TX_CONTINUE;
 }
 
+static int ieee80211_injection_patch = 1;
+module_param(ieee80211_injection_patch, int, 0644);
+MODULE_PARM_DESC(ieee80211_injection_patch, "Enable packet injection patch");
+
 static ieee80211_tx_result debug_noinline
 ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
 {
@@ -686,14 +690,20 @@
 	 * 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.
+	 * This should be done using a radiotap flag. For the time being, this
+	 * may be enabled/disabled in
+	 * /sys/module/mac80211/parameters/ieee80211_injection_patch
 	 */
-	if (unlikely((info->flags & IEEE80211_TX_CTL_INJECTED) &&
-	   !(tx->sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES))) {
+       if (unlikely(ieee80211_injection_patch &&
+          (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_injection_patch &&
+           info->control.vif->type == NL80211_IFTYPE_MONITOR))
+                return TX_CONTINUE;
 
 	if (unlikely(ieee80211_is_ctl(hdr->frame_control)))
 		return TX_CONTINUE;