yo tengo estos, que hacen lo mismo , pero no de dan guerra con lo de espacios en blanco.
--- a/net/mac80211/cfg.c Tue May 28 16:57:23 2013 -0400
+++ b/net/mac80211/cfg.c Tue May 28 17:16:15 2013 -0400
@@ -801,3 +801,4 @@
}
- } else if (local->open_count == local->monitors) {
+ // Patch: Always allow channel change, even if a normal virtual interface is present
+ } else /*if (local->open_count == local->monitors)*/ {
local->_oper_channel = chandef->chan;
--- a/net/wireless/chan.c 2013-08-29 18:47:51.000000000 +0200
+++ b/net/wireless/chan.c 2013-08-31 22:20:45.014734447 +0200
@@ -441,4 +441,2 @@
return -EOPNOTSUPP;
- if (!cfg80211_has_monitors_only(rdev))
- return -EBUSY;
--- a/net/mac80211/tx.c 2013-08-29 18:47:51.000000000 +0200
+++ b/net/mac80211/tx.c 2013-08-31 22:35:10.386721602 +0200
@@ -1454,7 +1454,10 @@
}
}
- ieee80211_set_qos_hdr(sdata, skb);
+ // Don't overwrite QoS header in monitor mode
+ if (likely(info->control.vif->type != NL80211_IFTYPE_MONITOR)) {
+ ieee80211_set_qos_hdr(sdata, skb);
+ }
ieee80211_tx(sdata, skb, false, band);
}
--- a/drivers/net/wireless/rtl818x/rtl8187/dev.c 2013-08-29 18:47:51.000000000 +0200
+++ b/drivers/net/wireless/rtl818x/rtl8187/dev.c 2013-08-31 22:50:38.266707828 +0200
@@ -252,9 +252,14 @@
flags |= RTL818X_TX_DESC_FLAG_NO_ENC;
flags |= ieee80211_get_tx_rate(dev, info)->hw_value << 24;
- if (ieee80211_has_morefrags(tx_hdr->frame_control))
- flags |= RTL818X_TX_DESC_FLAG_MOREFRAG;
if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) {
+ if (ieee80211_has_morefrags(tx_hdr->frame_control))
+ {
+ // If info->control.vif is NULL it's mostly likely in monitor mode
+ if (info->control.vif != NULL && info->control.vif->type != NL80211_IFTYPE_MONITOR) {
+ flags |= RTL818X_TX_DESC_FLAG_MOREFRAG;
+ }
+ }
flags |= RTL818X_TX_DESC_FLAG_RTS;
flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
rts_dur = ieee80211_rts_duration(dev, priv->vif,